Salakhetdinov Shamil
mcp2004 at mail.ru
Tue May 1 13:26:41 CDT 2012
Hi Gustav --
Yes, CompareObjects6
public static bool CompareObjects6<T>(T o1, T o2) where T : class
{
// 'mere mortals' version refactored 2
if (o1 != null && o2 != null) return o1.Equals(o2);
return (o1 == o2);
}
beats even
public static bool CompareObjects8<T>(T o1, T o2) where T : class
{
// Gustav's version refactored 2
if (o1 == null || o2 == null) return (o1 == o2);
return o1.Equals(o2);
}
for 'Optimize code' compilation version. It's funny that when you look at decompiled code you'll find that CompareObjects6 (decompiled) look like CompareObjects8 (original) and vice versa:
public static bool CompareObjects6<T>(T o1, T o2)
{
if (o1 == null || o2 == null)
{
return o1 == o2;
}
else
{
return o1.Equals(o2);
}
}
public static bool CompareObjects8<T>(T o1, T o2)
{
if (o1 != null && o2 != null)
{
return o1.Equals(o2);
}
else
{
return o1 == o2;
}
}
When 'Optimize code' option is not used then decompiled versions of CompareObjects6 and CompareObjects8 are:
public static bool CompareObjects6<T>(T o1, T o2)
{
bool flag;
bool flag1;
if (o1 == null)
{
flag1 = true;
}
else
{
flag1 = o2 == null;
}
bool flag2 = flag1;
if (flag2)
{
flag = o1 == o2;
}
else
{
flag = o1.Equals(o2);
}
return flag;
}
public static bool CompareObjects8<T>(T o1, T o2)
{
bool flag;
bool flag1;
if (o1 == null)
{
flag1 = false;
}
else
{
flag1 = o2 != null;
}
bool flag2 = flag1;
if (flag2)
{
flag = o1.Equals(o2);
}
else
{
flag = o1 == o2;
}
return flag;
}
Thank you.
-- Shamil
Tue, 01 May 2012 17:55:05 +0200 от "Gustav Brock" <Gustav at cactus.dk>:
> Hi Shamil
>
> CompareObjects6 looks like the winner. And it is very logical to read as well.
>
> /gustav
>
>
> >>> mcp2004 at mail.ru 01-05-2012 17:35 >>>
> Hi Gustav and Lambert at all:
>
> Have a look I have added one mode 'Mere mortals' version:
>
> C#
> ==
>
> public static bool CompareObjects6<T>(T o1, T o2) where T : class
> {
> // 'Mere mortals' version refactored 2
> if (o1 != null && o2 != null) return o1.Equals(o2);
> return (o1 == o2);
> }
>
<<< snip >>>