मेरे पास यह कोड है जो टेस्ट क्लास से मूल्य प्राप्त करता है और फिर इसे उस प्रकार के रूप में परिवर्तित करता है। यह "Int32" के रूप में सही ढंग से प्रिंट करता है लेकिन जब मैं समान वैल्यू के साथ समान वैल्यू के साथ समानता का परीक्षण करता हूं, तो यह "झूठा" प्रिंट करता है। मुझे संदेह है क्योंकि यह संदर्भ समानता का परीक्षण कर रहा है और 2 चर वास्तव में अभी भी वस्तुएं हैं। क्या उनकी तुलना करने का कोई तरीका है, ध्यान में रखते हुए मुझे रनटाइम तक लौटाए गए मान के प्रकार को नहीं पता होगा (यह एक स्ट्रिंग, फ्लोट, अन्य क्लास इत्यादि हो सकता है)?मैं प्रतिबिंब के "GetValue" से प्राप्त मूल्य-प्रकारों की तुलना कैसे कर सकता हूं?
class Test{public int y;}
static void Main()
{
var test1 = new Test{y=1};
var test2 = new Test{y=1};
var fields = test1.GetType().GetFields();
var test1Value = fields[0].GetValue(test1);
var test2Value = fields[0].GetValue(test2);
var test1Converted = Convert.ChangeType(test1Value, test1Value.GetType());
var test2Converted = Convert.ChangeType(test2Value, test2Value.GetType());
Console.WriteLine(test1Converted); // prints Int32
Console.WriteLine(test1Converted == test2Converted); // prints false
}
बराबर संदर्भ के लिए विफल हो जाएगा है प्रकार, यहां यह मान/पूर्णांक प्रकार के लिए सफल है, क्योंकि यह मान तुलना करता है, इसे समान विधि –
@MrinalKamboj के स्पष्ट ओवरराइडिंग की आवश्यकता है क्या आप एक विशिष्ट उदाहरण दे सकते हैं जहां एक संदर्भ प्रकार असफल हो जाएगा? सभी संदर्भ प्रकार * पहले से ही समानता संदर्भ के लिए डिफ़ॉल्ट और 'GetValue' द्वारा बॉक्स नहीं किया जाएगा। –
जैसा कि आपने सुझाव दिया है, संदर्भ बराबर संदर्भ समानता को संदर्भित करता है, डिफ़ॉल्ट बराबर विधि के लिए, इसलिए यह आवश्यक नहीं है कि प्रतिबिंब के माध्यम से दो fetched संदर्भ प्रकार परिवर्तनीय एक ही संदर्भ को इंगित करेंगे, आंतरिक मूल्य की तुलना करने के लिए इसे बराबर विधि के स्पष्ट ओवरराइडिंग की आवश्यकता होगी वर्तमान उत्तर के लिए –