2009-07-07 13 views
6

मैं एक ही प्रकार की दो इकाइयों की तुलना करने का सबसे प्रभावी तरीका जानना चाहता हूं।दो इकाई ढांचे इकाइयों की तुलना करने का सबसे अच्छा तरीका क्या है?

एक इकाई हाथ से एक एक्सएमएल फ़ाइल से बनाई गई है (यानी नया उदाहरण और मैन्युअल रूप से सेट गुण) और दूसरा मेरे ऑब्जेक्ट संदर्भ से retvied है।

मैं जानना चाहता हूं कि संपत्ति मान प्रत्येक उदाहरण में समान हैं या नहीं।

मेरा पहला विचार प्रत्येक वस्तु से संपत्ति मूल्यों का हैश उत्पन्न करना और हैश की तुलना करना है, लेकिन एक और तरीका हो सकता है, या एक तरह से बनाया जा सकता है?

किसी भी सुझाव का स्वागत किया जाएगा।

static class ObjectComparator<T> 
{ 
    static bool CompareProperties(T newObject, T oldObject) 
    { 
     if (newObject.GetType().GetProperties().Length != oldObject.GetType().GetProperties().Length) 
     { 
      return false; 
     } 
     else 
     { 
      var oldProperties = oldObject.GetType().GetProperties(); 

      foreach (PropertyInfo newProperty in newObject.GetType().GetProperties()) 
      { 
       try 
       { 
        PropertyInfo oldProperty = oldProperties.Single<PropertyInfo>(pi => pi.Name == newProperty.Name); 

        if (newProperty.GetValue(newObject, null) != oldProperty.GetValue(oldObject, null)) 
        { 
         return false; 
        } 
       } 
       catch 
       { 
        return false; 
       } 
      } 

      return true; 
     } 
    } 
} 

मैं अभी तक यह परीक्षण नहीं किया है, यह विचार के लिए एक भोजन की अधिक है:

बहुत धन्यवाद,

जेम्स

अद्यतन

मैं इस के साथ आया था समूह से कुछ और विचार उत्पन्न करने के लिए।

एक चीज जो समस्या हो सकती है वह गुणों की तुलना कर रहा है जिनके पास इकाई मान स्वयं हैं, यदि डिफ़ॉल्ट तुलनित्र ऑब्जेक्ट संदर्भ पर तुलना करता है तो यह कभी भी सत्य नहीं होगा। एक संभावित फिक्स मेरे इकाइयों पर समानता ऑपरेटर को अधिभारित करना है ताकि यह इकाई आईडी पर तुलना करे।

उत्तर

5

अपनी ऑब्जेक्ट की समान विधि को ओवरराइड करें और एक कार्यान्वयन लिखें जो गुणों की तुलना करता है जो इसे बराबर बनाता है।

public override bool Equals(object obj) 
    { 
     return MyProperty == ((MyObject)obj).MyProperty 
    } 
+0

तो मूल रूप से केवल प्रत्येक संपत्ति पर समानता की जांच करने और ओवरराइडिंग की सुविधा का उपयोग करने के लिए कथन की एक श्रृंखला का उपयोग करें। तुलना करने के लिए इकाई पर विधि क्या है? – James

+0

हाँ, मुझे लगता है। यदि मैं आपके बाद के लिए बहुत आसान तरीका चला गया हूं, तो कुछ और कोड क्यों पोस्ट न करें :) –

+0

ठीक है, धन्यवाद, जब मेरे पास कुछ समाधान बीमार है, तो मेरा समाधान – James

संबंधित मुद्दे

 संबंधित मुद्दे