2010-10-24 9 views
7

Mam klasy C#, które chcę pętli przez właściwości jako parę klucz/wartość, ale nie wiem jak.Czy możliwe jest przechodzenie przez obiekt klasy C#?

Oto, co chciałbym zrobić:

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

Dzięki z góry za pomoc.

Odpowiedz

12

Yup:

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

Nie da je jako pary klucz/wartość, ale można dostać wszelkiego rodzaju informacji z PropertyInfo.

Należy pamiętać, że spowoduje to tylko publiczne właściwości. W przypadku niepublicznych należy użyć przeciążenia, które ma wartość BindingFlags. Jeśli naprawdę chcesz po prostu wymienić/par wartości dla właściwości instancji konkretnej instancji, można zrobić coś takiego:

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

Dzięki Jon, pracował idealnie. – SLoret

0

Sprawdź rozwiązań here - mimo że ogranicza się properies publicznych podejście powinno pracować dla Ciebie aby zdobyć je wszystkie.

Powiązane problemy