2010-08-25 6 views
6

(PropertyInfo SetValue and nulls से संबंधित)को ValueInype को सेट करने के लिए FieldInfo.SetValue का उपयोग नहीं करना चाहिए?

अगर मैं public class Thing { public int X; } है, एक Thing o, और एक FieldInfo fi कि X क्षेत्र को इंगित करता है, यह क्यों fi.SetValue(o, null) कॉल करने के लिए कानूनी है? रनटाइम फ़ील्ड X शून्य पर सेट करता है, यानी default(int) शिकायत करने के बजाय ValueType को null पर सेट नहीं किया जा सकता है।

क्या कोई इस व्यवहार के पीछे डिजाइन पसंद को जानता है, जो कम से कम सी # से कम से कम आश्चर्य के मेरे सिद्धांत का उल्लंघन करता है?

+0

मैं सहमत हूं कि कम से कम दस्तावेज़ों के अनुसार, इसे एक ArgumentException फेंकना चाहिए। – leppie

+0

यह प्रतिबिंब एपीआई के लिए निराशाजनक व्यवहार है – Doug

उत्तर

4

ArgumentException के लिए अपवाद बॉक्स में निहित पाठ से पता चलता है कि पास किया गया मान रूपांतरण के अधीन है, जो समझाएगा कि यह क्यों सफल होता है।

मूल्य पैरामीटर को क्षेत्र में परिवर्तित और संग्रहित नहीं किया जा सकता है।

मैं मानता हूं कि यह थोड़ा अजीब लगता है, खासकर जब मैं आमतौर पर प्रतिबिंब एपीआई को अधिक कठोर और कम क्षमा करने की उम्मीद करता हूं।

आप Eric Lippert से संपर्क करने का प्रयास कर सकते हैं, जबकि यह सी # के बजाए एक बीसीएल/सीएलआर प्रश्न है, वहां एक मौका है कि वह जवाब जान पाएगा या किसी को जानता है। या तो वह एक बहुत अच्छा अनुमान देने में सक्षम हो।

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

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