संभव डुप्लिकेट:
मैंने इस तरह से कुछ कोडित किया है:
सार्वजनिक 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
Post a Comment