c# compare two generic values -


संभव डुप्लिकेट:

मैंने इस तरह से कुछ कोडित किया है:

  सार्वजनिक bool IsDataChanged () {T value1 = GetValue2; टी value2 = GetValue1 (); वापसी (valueInDB! = ValueFromView); }  

अभी इस समारोह में त्रुटि के साथ संकलन नहीं होता " ऑपरेटर '=' प्रकार 'टी' और 'टी' के प्रकार पर लागू नहीं किया जा सकता है। "। यह फ़ंक्शन कार्य करने के लिए मुझे क्या करना है?

आप सामान्य प्रकार पर ऑपरेटर्स का उपयोग नहीं कर सकते हैं (को छोड़कर) Foo == नल के लिए जो विशेष स्थिति में है) जब तक आप जोड़ नहीं करते हैं, जहां टी: वर्ग यह इंगित करने के लिए कि यह एक संदर्भ प्रकार है (फिर foo == बार कानूनी है)

उपयोग EqualityComparer & lt; T & gt; । आपके लिए यह करने के लिए डिफॉल्ट यह ऐसे प्रकारों पर काम करता है जो केवल == के लिए ऑपरेटर अधिभार की आपूर्ति करते हैं

  • IEquatable & lt; T & gt;
  • ओपरराइड ऑब्जेक्ट। एक्लॉल्स् ()

सामान्यतः == ऑपरेटर को कार्यान्वित करने में और इनमें से कम से कम एक भी नहीं करना बहुत बुरा विचार होगा, इसलिए यह संभव नहीं है एक मुद्दा बनने के लिए।

  सार्वजनिक बूल आईएसडाटा चेंजेड & lt; T & gt; () {टी value1 = GetValue2; टी value2 = GetValue1 (); वापसी! इक्विटी कॉम्पपरर & lt; T & gt; .Default.Equals (मान 1, मान 2); }  

यदि आप IEquatable & lt; T & gt; के लिए प्रतिबंधित नहीं हैं, तो समानता कॉम्पैयरर डिफ़ॉल्ट फ़ॉलबैक के कारण मूल्य प्रकारों के साथ उपयोग किए जाने पर मुक्केबाजी का कारण हो सकता है यदि वे IEquatable & lt; T & gt; (यदि आप उन प्रकारों को नियंत्रित करते हैं जो इसका उपयोग किया जा रहा है तो इससे कोई फर्क नहीं पड़ता)। मैं मान रहा हूँ कि आप = का प्रयोग कर रहे थे! प्रदर्शन के लिए हालांकि जेनेरिक प्रकार को प्रतिबंधित करना ऑब्जेक्ट के माध्यम से <ऑब्जेक्ट (ऑब्जेक्ट) मार्ग से आकस्मिक मुक्केबाजी से बचना होगा।


Comments