2010-01-20 6 views
17

मुझे कुछ कक्षाओं में सभी गुणों के माध्यम से लूप करना है और यह देखने के लिए कि क्या उनके पास कोई मूल्य है, किसी भी शून्य गुणों को जांचना है। मैं PropertyInfo.GetValue() से सामान्य जेनेबल प्रकार में लौटाए गए मान को कैसे डालूं ताकि मैं HasValue प्रॉपर्टी देख सकूं?प्रतिबिंब - सभी शून्य गुणों की जांच करें

कोड संक्षिप्तता के लिए कतरना:

foreach (PropertyInfo propInfo in this.GetType().GetProperties()) 
{ 
    if (<Snip: Check to see that this is a nullable type>)                  
    { 
      //How do i cast this properly in here to allow me to do: 
      if(!((Nullable)propInfo.GetValue(this, null)).HasValue) 
        //More code here 
    } 
} 
+1

क्या आप अभी नहीं कर सकते हैं (propInfo.GetValue (यह, शून्य)! = शून्य)? या आप स्पष्ट रूप से HasValue का उपयोग करना चाहते हैं? –

उत्तर

29

टिप्पणी मैं तुम्हारा मतलब Nullable<T> संभालने कर रहा हूँ; यदि आपका मतलब Nullable<T> या कोई संदर्भ है, तो आपके पास पहले से ही यह है: object (GetValue से) - बस null देखें।

Nullable<T> के मामले में; आप एक गैर-जेनेरिक प्रकार (object के अलावा) पर नहीं डाले जा सकते हैं - लेकिन आपको इसकी आवश्यकता नहीं है; बस जांचें कि यह null नहीं है, क्योंकि खाली Nullable<T>null पर बॉक्स किया गया है, और GetValueobject लौटाता है (इसलिए यह मान बॉक्स करता है)।

if(Nullable.GetUnderlyingType(propInfo.PropertyType) != null) { 
    // it is a Nullable<T> for some T 
    if(propInfo.GetValue(this, null) != null) { 
     // it has a value (it isn't an empty Nullable<T>) 
    } 
} 

स्पष्ट करने के लिए, Nullable एक स्थिर उपयोगिता वर्ग है कि पूरी तरह से अलग है Nullable<T> struct; इसलिए आप Nullable पर बिल्कुल नहीं डाले हैं। जैसा कि होता है, NullableGetUnderlyingType जैसी चीजें प्रदान करने के लिए मौजूद है जो आपको Nullable<T> के साथ काम करने में मदद करता है।

+0

अच्छा जवाब, धन्यवाद। – Paddy

+0

स्रोत कोड संदर्भ: http://referencesource.microsoft.com/#mscorlib/system/nullable.cs,134 –

0

जब से तुम स्थापित कर लिया है कि संपत्ति के प्रकार Nullable<something> की है, तुम्हें पता है अपने मूल्य एक HasValue संपत्ति है - तो प्रतिबिंब द्वारा कि संपत्ति खोजने के लिए और अपने मूल्य मिलता है।