2010-10-24 7 views
7

मेरे पास एक सी # कक्षा है जिसे मैं गुणों के माध्यम से एक कुंजी/मूल्य जोड़ी के रूप में लूप करना चाहता हूं लेकिन यह नहीं जानता कि कैसे।क्या यह सी # क्लास ऑब्जेक्ट के माध्यम से लूप करने के लिए संभव है?

Foreach (classobjectproperty prop in classobjectname) 
{ 
    if (prop.name == "somename") 
     //do something cool with prop.value 
} 

मदद के लिए अग्रिम धन्यवाद:

यहाँ मैं करना चाहते हैं क्या है।

उत्तर

12

हाँ:

Type type = typeof(Form); // Or use Type.GetType, etc 
foreach (PropertyInfo property in type.GetProperties()) 
{ 
    // Do stuff with property 
} 

इससे उन्हें कुंजी/मान जोड़े के रूप में नहीं देंगे, लेकिन आप एक PropertyInfo से जानकारी के सभी प्रकार प्राप्त कर सकते हैं।

ध्यान दें कि इससे केवल सार्वजनिक संपत्तियां ही दी जाएंगी। गैर-सार्वजनिक लोगों के लिए, आप अधिभार का उपयोग करना चाहते हैं जो BindingFlags लेता है। यदि आप वास्तव में सिर्फ नाम चाहते हैं/एक विशेष उदाहरण के कहने गुण, आप की तरह कुछ कर सकता है के लिए मूल्य जोड़े:

var query = foo.GetType() 
       .GetProperties(BindingFlags.Public | 
           BindingFlags.Instance) 
       // Ignore indexers for simplicity 
       .Where(prop => !prop.GetIndexParameters().Any()) 
       .Select(prop => new { Name = prop.Name, 
            Value = prop.GetValue(foo, null) }); 

foreach (var pair in query) 
{ 
    Console.WriteLine("{0} = {1}", pair.Name, pair.Value); 
} 
+0

धन्यवाद जॉन, सही काम किया। – SLoret

0

बाहर चेक समाधान here - हालांकि यह है कि सार्वजनिक properies को प्रतिबंधित दृष्टिकोण आप के लिए काम करना चाहिए उन्हें सब प्राप्त करने के लिए।

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