2010-09-10 3 views
21

Tengo una clase que contiene más de 150 campos. Necesito el nombre de los campos (no el valor) en una matriz.Cómo hacer un bucle en los nombres de campo de una clase

porque es muy difícil y no es un buen método para escribir el nombre de 150 campos (que se puede incrementar o disminuir en recuento de acuerdo con el cambio de requisitos) manualmente en el código.

necesito ayuda para obtener un bucle a través de los nombres de campo o una lista de nombres de campo en una matriz para que pueda recorrerlo y usarlo en el código. estoy utilizando Visual Studio 2008

Gracias

Respuesta

18

para todos campos de instancia no públicas públicas +:

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

o VS2005 (comentarios):

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 bagazo. es realmente una buena solución. puedes por favor decirme eso. ¿es lo mismo para visual studio 2005 o habrá otra sincronización? –

+0

actaully tengo una misma aplicación de la versión anterior en vs2005 –

+0

Hay una pequeña diferencia. No puede usar ConvertAll en vs 2005, por lo que debe usar foreach en su lugar. Y también use concreto tipo en lugar de var. – StuffHappens

3

intento

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

Prueba esto:

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

Este trabajo para mí perfectamente ExampleClass es la clase Es necesario enumerar todos los campos

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

trabajado para mí

var t = typeof(YOURTYPE); 

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

// t para el tipo

Cuestiones relacionadas