2010-09-10 10 views
21

के फ़ील्ड नामों पर लूप कैसे करें मुझे एक कक्षा मिली है जिसमें 150 से अधिक फ़ील्ड हैं। मुझे किसी सरणी में फ़ील्ड (मान नहीं) की आवश्यकता है।कक्षा

क्योंकि इसकी बहुत मुश्किल है और एक अच्छा दृष्टिकोण 150 खेतों नाम (जो वृद्धि की जा सकती है या आवश्यकता परिवर्तन के अनुसार गिनती में कम कर) मैन्युअल रूप से कोड में लिखने के लिए।

मुझे फ़ील्ड के नामों के माध्यम से लूप प्राप्त करने या सरणी में फ़ील्ड नामों की सूची प्राप्त करने में सहायता चाहिए ताकि मैं इसे लूप कर सकूं और कोड में इसका उपयोग कर सकूं। मैं विजुअल स्टूडियो 2008

धन्यवाद

उत्तर

18

उपयोग कर रहा हूँ सभी सार्वजनिक + nonpublic उदाहरण क्षेत्रों के लिए:

var fields = typeof(YourType).GetFields(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
var names = Array.ConvertAll(fields, field => field.Name); 

या VS2005 में (टिप्पणी):

FieldInfo[] fields = typeof(YourType).GetFields(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
string[] names = Array.ConvertAll<FieldInfo, string>(fields, 
    delegate(FieldInfo field) { return field.Name; }); 
+0

हाय के लिए काम किया सूची की जरूरत है मार्क। यह वास्तव में अच्छा समाधान है। क्या आप कृपया मुझे बता सकते हैं। क्या यह दृश्य स्टूडियो 2005 के लिए समान है या अन्य syntex होगा? –

+0

actaully मुझे बनाम2005 –

+0

में पिछले संस्करण का एक ही एप्लीकेशन मिला है इसमें एक छोटा अंतर है। आप 2005 में बनाम कनवर्ट ऑल नहीं कर सकते हैं, इसलिए आपको इसके बजाय foreach का उपयोग करना चाहिए। और var के बजाय ठोस प्रकार का भी उपयोग करें। – StuffHappens

3

कोशिश

public static string[] GetFieldNames(Type t) 
    { 
     FieldInfo[] fieldInfos = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 
     return fieldInfos.Select(x => x.Name).ToArray(); 
    } 
9

इस प्रयास करें:

var t = typeof(YourTypeHere); 
List<string> fieldNames = new List<string>(t.GetFields().Select(x => x.Name)); 
1

मेरे लिए यह काम पूरी तरह से ExampleClass वर्ग है आप सभी क्षेत्रों

public void GetClassFields(Type t) 
{ 
    List<string> fieldNames = new List<string>(t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Select(x => x.Name)); 
    foreach (string name in fieldNames) 
    { 
     Console.WriteLine(name); 
    }  
} 
//Usage 
GetClassFields(typeof(ExampleClass)); 
1

मुझे

var t = typeof(YOURTYPE); 

var allfieldNames = new List<string>(t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Select(x => x.Name)); 

// प्रकार के लिए टी