2010-10-24 25 views
7

Tengo una clase C# que quiero recorrer las propiedades como un par clave/valor pero no sé cómo.¿Es posible recorrer un objeto Clase C#?

Esto es lo que me gustaría hacer:

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

Gracias de antemano por la ayuda.

Respuesta

12

Sí:

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

Esto no les dará como pares clave/valor, pero se puede obtener todo tipo de información de una PropertyInfo.

Tenga en cuenta que esto solo dará propiedades públicas. Para los que no son públicos, querrás usar la sobrecarga que toma un BindingFlags. Si realmente quiere sólo pares nombre/valor para las propiedades de instancia de un caso particular, usted podría hacer algo como:

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

Gracias Jon, funcionó perfecto. – SLoret

0

Mira la soluciones here - a pesar de que restringe a Properies públicos el enfoque debe trabajar para usted para obtenerlos a todos.

Cuestiones relacionadas