2010-09-16 18 views
73

मैं कुछ कस्टम सत्यापन करने के लिए गतिशील रूप से किसी ऑब्जेक्ट पेड़ को पार्स करना चाहता हूं। प्रमाणीकरण इस तरह महत्वपूर्ण नहीं है, लेकिन मैं PropertyInfo कक्षा को बेहतर समझना चाहता हूं।संपत्ति प्रकार का पता लगाने के लिए PropertyInfo का उपयोग

मैं कुछ इस तरह कर रही होगी,

public bool ValidateData(object data) 
{ 
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) 
    { 
     if (the property is a string) 
     { 
      string value = propertyInfo.GetValue(data, null); 

      if value is not OK 
      { 
       return false; 
      } 
     } 
    }    

    return true; 
} 

सच ही हिस्सा इस समय मैं के बारे में परवाह 'यदि संपत्ति एक स्ट्रिंग है' है। मैं PropertyInfo ऑब्जेक्ट से यह कैसे पता लगा सकता हूं कि यह किस प्रकार है।

मुझे स्ट्रिंग्स, इंट्स, युगल जैसे मूल सामानों से निपटना होगा। लेकिन मुझे ऑब्जेक्ट्स के साथ भी निपटना होगा, और यदि ऐसा है तो मुझे उन ऑब्जेक्ट्स के अंदर ऑब्जेक्ट पेड़ को उनके अंदर मूल डेटा को सत्यापित करने के लिए आगे बढ़ने की आवश्यकता होगी, उनके पास तार भी होंगे।

धन्यवाद।

उत्तर

140

संपत्ति का प्रकार प्राप्त करने के लिए PropertyInfo.PropertyType का उपयोग करें।

public bool ValidateData(object data) 
{ 
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) 
    { 
     if (propertyInfo.PropertyType == typeof(string)) 
     { 
      string value = propertyInfo.GetValue(data, null); 

      if value is not OK 
      { 
       return false; 
      } 
     } 
    }    

    return true; 
} 
+0

ग्रेट। मैं कोशिश करूँगा टाइपफ (स्ट्रिंग) और टाइपोफ (स्ट्रिंग) बराबर है? ऊपर एक स्ट्रिंग और स्ट्रिंग दोनों के साथ होगा? – peter

+2

ठीक है, कुछ यूनिट परीक्षण लिखे हैं और यह एक इलाज करता है। यह वास्तव में स्ट्रिंग का इलाज करता है और स्ट्रिंग करता है। मुझे उम्मीद थी, लेकिन बस यह सुनिश्चित करना चाहता था। – peter

+2

@ पीटर हां, 'स्ट्रिंग' और' स्ट्रिंग' बराबर हैं। 'स्ट्रिंग' 'स्ट्रिंग' के लिए उपनाम है। – bump

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