2010-10-24 16 views
7

Ho una classe C# che voglio scorrere tra le proprietà come coppia chiave/valore ma non so come.È possibile eseguire il ciclo di un oggetto Classe C#?

Ecco quello che vorrei fare:

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

Grazie in anticipo per l'aiuto.

risposta

12

Yup:

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

Questo non darà loro come coppie chiave/valore, ma è possibile ottenere tutti i tipi di informazioni da un PropertyInfo.

Si noti che questo darà solo proprietà pubbliche. Per quelli non pubblici, è necessario utilizzare il sovraccarico che prende uno BindingFlags. Se davvero voglio solo coppie nome/valore per le proprietà di un'istanza di un particolare esempio, si potrebbe fare qualcosa di simile:

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

Grazie Jon, ha funzionato perfettamente. – SLoret

0

Scopri i migliori soluzioni here - anche se questo limita a properies pubblici l'approccio dovrebbe funzionare per voi per averli tutti

Problemi correlati