2010-09-10 9 views
21

Mam klasy, która zawiera więcej niż 150 pól. potrzebuję nazwy pól (nie wartości) w tablicy.Jak zapętlić nazwy pól klasy

ponieważ jest to bardzo trudne i niezbyt dobre podejście do wpisywania nazwy pól 150 (które mogą być zwiększane lub zmniejszane w liczbie zgodnie ze zmianą zapotrzebowania) ręcznie w kodzie.

Potrzebuję pomocy, aby uzyskać pętlę poprzez nazwy dla pola lub uzyskać listę nazw pól w tablicy, tak, że mogę przechodzić nad nim i używać go w kodzie. używam Visual Studio 2008

Thanks

Odpowiedz

18

dla wszystkich pomieszczeniach + niepublicznych dziedzinach np:

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

lub w VS2005 (komentarz):

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

hi marc. to naprawdę dobre rozwiązanie. czy możesz mi to powiedzieć. czy to samo dotyczy visual studio 2005, czy będzie inny syntex? –

+0

actaully Mam tę samą aplikację z poprzedniej wersji w vs2005 –

+0

Jest mała różnica. Nie możesz używać ConvertAll w porównaniu z 2005, więc powinieneś użyć foreach. A także używaj typu betonu zamiast var. – StuffHappens

3

spróbować

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

Spróbuj tego:

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

To praca dla mnie jest idealnie ExampleClass klasa Trzeba wymienić wszystkie pola

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

pracował dla mnie

var t = typeof(YOURTYPE); 

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

// t dla typu

Powiązane problemy