[AccessD] CodePlex WCF Community code snippet

Salakhetdinov Shamil mcp2004 at mail.ru
Tue May 1 10:13:15 CDT 2012


Hi Gustav --

Have a look - I have got decompiled the original code using Telerik JustDecompile (compilation of original code was done using VS2010 with 'Optimize code' option set to false):

- I'd still put your code version on first place (both original and refactored versions produce the same executable code internally), CodePlex version - on second and 'Mere mortals' refactored version - now on third. (Original 'mere mortals' version is out of game now as very ineffective).


// Gustav (decompiled)
public static bool CompareObjects4<T>(T o1, T o2)
{
    bool flag;
    bool flag1;
    bool flag2;
    if (o1 == null)
    {
        flag1 = false;
    }
    else
    {
        flag1 = o2 != null;
    }
    bool flag3 = flag1;
    if (flag3)
    {
        flag = o1.Equals(o2);
    }
    else
    {
        if (o1 != null)
        {
            flag2 = false;
        }
        else
        {
            flag2 = o2 == null;
        }
        flag = flag2;
    }
    return flag;
}


// CodePlex  (decompiled)
public static bool CompareObjects<T>(T o1, T o2)
{
    bool flag;
    bool flag1;
    bool flag2 = o1 == null == o2 == null;
    if (flag2)
    {
        if (o1 == null)
        {
            flag1 = true;
        }
        else
        {
            flag1 = o1.Equals(o2);
        }
        flag = flag1;
    }
    else
    {
        flag = false;
    }
    return flag;
}


// 'Mere mortals'  (decompiled)
public static bool CompareObjects5<T>(T o1, T o2)
{
    bool flag;
    bool flag1;
    bool flag2;
    if (o1 != null)
    {
        flag1 = true;
    }
    else
    {
        flag1 = o2 != null;
    }
    bool flag3 = flag1;
    if (flag3)
    {
        if (o1 == null)
        {
            flag2 = false;
        }
        else
        {
            flag2 = o2 != null;
        }
        flag3 = flag2;
        if (flag3)
        {
            flag = o1.Equals(o2);
        }
        else
        {
            flag = false;
        }
    }
    else
    {
        flag = true;
    }
    return flag;
}


Tue, 01 May 2012 16:44:24 +0200 от "Gustav Brock" <Gustav at cactus.dk>:
> Hi Shamil
> 
> Yes that's better/simpler.
> 
> The CodePlex solution I didn't like; it does right, of course, but you must read the method twice or more to grasp how it works.
> 
> /gustav
> 
> 
> >>> mcp2004 at mail.ru 01-05-2012 16:22 >>>
> Hi Gustav,
> 
> Very good!
> 
> I'd just have refactored it a bit:
> 
> public static bool CompareObjects3<T>(T o1, T o2) where T : class
> {
>     if (o1 == null || o2 == null) 
>         return (o1 == null && o2 == null);
>     return o1.Equals(o2);
> }
> 
> Thank you.
> 
> -- Shamil

<<< snip >>>



More information about the AccessD mailing list