2011-06-30 14 views
13

के सभी चरों को कैसे सूचीबद्ध करें सी # में कक्षा के सभी चर (फ़ील्ड्स) को सूचीबद्ध करने का कोई तरीका है। यदि हां से कोई मुझे कुछ उदाहरण दे सकता है तो उन्हें List में कैसे सहेजना है और उन्हें Anonymous Types (var) का उपयोग कर सकते हैं।कक्षा

+2

"चर," क्या आपका मतलब फ़ील्ड, गुण या दोनों है? –

+0

फ़ील्ड्स, सोरी मैंने अपनी पोस्ट संपादित की। – Burimi

+1

_ मुझे कोडज़ दिखाएं _... यहां दस्तावेज़ है: http://msdn.microsoft.com/en-us/library/sa5z9w50.aspx – sehe

उत्तर

32

आपका प्रश्न पूरी तरह से स्पष्ट नहीं है। ऐसा लगता है कि आप अपने वर्ग की दी गई उदाहरण के लिए क्षेत्रों के मूल्यों हैं:

var fieldValues = foo.GetType() 
        .GetFields() 
        .Select(field => field.GetValue(foo)) 
        .ToList(); 

ध्यान दें कि fieldValuesList<object> है। यहां, foo आपकी कक्षा का एक मौजूदा उदाहरण है।

आप public और गैर public क्षेत्रों चाहते हैं, आप के माध्यम से

var bindingFlags = BindingFlags.Instance | 
        BindingFlags.NonPublic | 
        BindingFlags.Public; 
var fieldValues = foo.GetType() 
        .GetFields(bindingFlags) 
        .Select(field => field.GetValue(foo)) 
        .ToList(); 

बाध्यकारी झंडे को बदलने के लिए आप केवल नाम चाहते हैं की जरूरत है:

var fieldNames = typeof(Foo).GetFields() 
          .Select(field => field.Name) 
          .ToList(); 

यहाँ, Foo का नाम है आपकी कक्षा।

+0

मुझे इस वाक्यविन्यास –

2
var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList(); 
3
myClass.GetType().GetProperties() 
+0

के साथ "अभिव्यक्ति में लैम्ब्डा अभिव्यक्तियाँ नहीं हो सकतीं" फ़ील्ड के बारे में गुण नहीं है। – user2913184

+0

वह चर के बारे में नहीं पूछ रहा है फ़ील्ड। –

8

यह एक कक्षा में सभी क्षेत्रों के नाम (दोनों सार्वजनिक और गैर सरकारी, दोनों स्थिर और दृष्टांत फ़ील्ड) सूची जाएगा:

BindingFlags bindingFlags = BindingFlags.Public | 
          BindingFlags.NonPublic | 
          BindingFlags.Instance | 
          BindingFlags.Static; 

foreach (FieldInfo field in typeof(TheClass).GetFields(bindingFlags)) 
{ 
    Console.WriteLine(field.Name); 
} 

आप क्षेत्रों प्राप्त करना चाहते हैं किसी वस्तु उदाहरण पर बजाय आधारित, GetType बजाय का उपयोग करें:

foreach (FieldInfo field in theObject.GetType().GetFields(bindingFlags)) 
{ 
    Console.WriteLine(field.Name); 
} 
+0

यह मेरे लिए काम किया। मेरी कक्षा में सभी enums प्राप्त करने की कोशिश कर रहा था: 'MyEnum enum = (MyEnum) 0; ' –

0

नहीं काफी प्रश्न पूछा - लेकिन यहां इसका तरीका "inv" नामक किसी ऑब्जेक्ट से दशमलव प्रकार के सभी गुणों के मान प्राप्त करने के लिए:

var properties = inv.GetType().GetProperties(); 

foreach (var prop in properties) 
{ 
    if (prop.ToString().ToLower().Contains("decimal")) 
    { 
     totalDecimal += (Decimal)prop.GetValue(inv, null); 
    } 
}