Ответ 1
Вы применяете отражение в значительной степени так же, как обычно, используя 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));
}
Обратите внимание, что если структура предоставляет свойства (как это почти наверняка), вы можете использовать Type.GetProperties
, чтобы получить их.
(Как отмечено в комментариях, это, возможно, не всегда хорошо, и в целом я подозрительно отношусь к пользовательским структурам, но я думал, что в любом случае я бы включил фактический ответ..)
EDIT: теперь вам кажется, что вы заинтересованы в настройке полей, которые немного сложнее из-за того, как работают типы значений (и да, это действительно не должно быть struct.) Вы захотите вставить один раз, задайте значения в отдельном экземпляре в ящике, а затем распакуйте в конце:
object boxed = new MyStruct();
// Call FieldInfo.SetValue(boxed, newValue) etc
MyStruct unboxed = (MyStruct) boxed;