zastosować odbicie w prawie taki sam sposób jak normalne, używając Type.GetFields
:
MyStruct structValue = new MyStruct(...);
foreach (var field in typeof(MyStruct).GetFields(BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public))
{
Console.WriteLine("{0} = {1}", field.Name, field.GetValue(structValue));
}
pamiętać, że jeśli struktura eksponuje właściwości (jak to prawie na pewno powinien) można użyć Type.GetProperties
, aby uzyskać na nich.
(Jak wspomniano w komentarzach, może to nie być dobra rzecz na pierwszym miejscu, i ogólnie Jestem podejrzliwy wobec zdefiniowanych przez użytkownika struktur, ale myślałem, że będę zawierać rzeczywistą odpowiedź w każdym razie ...)
EDIT: teraz wydaje się, że jesteś zainteresowany ustawienie polach, to nieco bardziej skomplikowane ze względu na sposób typy wartości pracy (i tak, to naprawdę nie powinnobyć struct .) Będziesz chciał umieścić po, ustawić wartości w pojedynczej instancji pudełkowej, a następnie rozwinąć na końcu:
object boxed = new MyStruct();
// Call FieldInfo.SetValue(boxed, newValue) etc
MyStruct unboxed = (MyStruct) boxed;
@ kr13: Prawie * na pewno * nie powinno mieć struktury z 20 polami. Zobacz http://msdn.microsoft.com/en-us/library/ms229017.aspx –
Przekształć strukturę w tablicę lub listę i/lub użyj biblioteki szeregowania. –
możliwy duplikat [Iterate Through a Struct?] (Http://stackoverflow.com/questions/661834/iterate-through-a-struct) – user7116