[AccessD] CodePlex WCF Community code snippet

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


Hi Lambert --

> I wish VB used it as well!!! ;-(
Yep :(

> If o1 is null can you call its Equals method?
No, .Equals method results in runtime error if o1 or o2 is null.

Thank you.

-- Shamil

Tue, 1 May 2012 11:03:03 -0400 от "Heenan, Lambert" <Lambert.Heenan at chartisinsurance.com>:
> Indeed Shamil. I am well aware of "sort circuit evaluation" : I wish VB used it as well!!! ;-(
> 
> One question, in you revision
> 
> 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);
> }
> 
> If o1 is null can you call its Equals method?
> 
> Lambert
> 
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Salakhetdinov Shamil
> Sent: Tuesday, May 01, 2012 10:34 AM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] CodePlex WCF Community code snippet
> 
> Hi Lambert,
> 
> Thank you for your reply. Please note that C# (as well as C and C++) do use so called "short circuit evaluation" (http://en.wikipedia.org/wiki/Short-circuit_evaluation).
> 
> I'd still have the code snippets arranged in the following order (first places in the sequence mean more professional/maintainable/effective code IMO. I can be found (absolutely) wrong in the end of this thread discussion).
> Anybody else?
> 
> 1. CompareObjects4
> 2. CompareObjects3
> 3. CompareObjects5
> 4. CompareObjects2
> 5. CompareObjects
> 
> Code snippets:
>         
> public static bool CompareObjects<T>(T o1, T o2) where T : class {
>     // CodePlex version
>     if ((o1 == null) != (o2 == null)) return false;            
>     return (o1 == null) || o1.Equals(o2); }
> 
> public static bool CompareObjects2<T>(T o1, T o2) where T : class {
>     // 'mere mortals' version
>     if (o1 == null && o2 == null) return true;
>     if (o1 != null && o2 == null) return false;
>     if (o1 == null && o2 != null) return false;
>     return o1.Equals(o2);
> }
> 
> public static bool CompareObjects3<T>(T o1, T o2) where T : class {
>     // Gustav's version
>     if (o1 == null || o2 == null)
>     {
>         return (o1 == null && o2 == null);
>     }
>     else
>     {
>         return o1.Equals(o2);
>     }
> }
> 
> public static bool CompareObjects4<T>(T o1, T o2) where T : class {
>     // Gustav's version refactored
>     if (o1 == null || o2 == null) 
>         return (o1 == null && o2 == null);
>     return o1.Equals(o2);
> }
> 
> public static bool CompareObjects5<T>(T o1, T o2) where T : class {
>     // 'mere mortals' version refactored
>     if (o1 == null && o2 == null) return true;
>     if (o1 == null || o2 == null) return false;
>     return o1.Equals(o2);
> }
> 
> 
> 
> Tue, 1 May 2012 09:11:17 -0400 от "Heenan, Lambert" <Lambert.Heenan at chartisinsurance.com>:
> > Hi Shamil,
> > 
> > I would be inclined to say that the code from codeplex is better. The logic is a little bit obscure, but then professional c/c++/c# codes have always tended to be a tad brief in their style. However a brief period of study makes it clearly correct. 
> > 
> > The reason I would prefer the codeplex code is that it only has 6 comparison operations, where the mere mortals code uses 10. Where there are many thousands of objects being compared in a tight loop that could significantly increase the execution time.
> > 
> > Lambert
> > 
> > -----Original Message-----
> > From: accessd-bounces at databaseadvisors.com 
> > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of 
> > Salakhetdinov Shamil
> > Sent: Tuesday, May 01, 2012 8:34 AM
> > To: Access Developers discussion and problem solving
> > Subject: [AccessD] CodePlex WCF Community code snippet
> > 
> > Hi All --
> > 
> > Sorry I'm posting C# code snippet here as my question/quick poll is more about coding style than anything else:
> > 
> > I have occasionally got browsing through the following CodePlex WCF Community source code:
> > 
> > http://wcf.codeplex.com/SourceControl/changeset/view/66aa503c963c#WCFJ
> > Query%2fTest%2fMicrosoft.Runtime.Serialization.Json.FunctionalTests%2f
> > Common%2fUtil.cs
> > 
> > ...
> >         public static bool CompareObjects<T>(T o1, T o2) where T : class
> >         {
> >             if ((o1 == null) != (o2 == null))
> >             {
> >                 return false;
> >             }
> > 
> >             return (o1 == null) || o1.Equals(o2);
> >         }
> > ...
> > 
> > And I have got stuck first trying to get its logic.
> > 
> > Would you consider the above code more professional and maintainable and effective than the following "mere mortals" code version? If Yes/No - why?
> > 
> >         public static bool CompareObjects2<T>(T o1, T o2) where T : class
> >         {
> >             if (o1 == null && o2 == null) return true;
> >             if (o1 != null && o2 == null) return false;
> >             if (o1 == null && o2 != null) return false;
> >             return o1.Equals(o2);
> >        }
> > 
> > Thank you ;)
> > 
> > -- Shamil
> > 
> > 
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> > 
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> > 
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 



More information about the AccessD mailing list