Подтвердить что ты не робот

Итерация через элементы Struct

Допустим, у нас есть структура

Struct myStruct
{
   int var1;
   int var2;
   string var3;
   .
   .
}

Можно ли итерации через члены структуры, возможно, использовать foreach? Я прочитал некоторые вещи на размышлениях, но я не уверен, как применить это здесь.

В структуре содержится около 20 переменных. Я пытаюсь читать значения отключить файл и попытаться присвоить их переменным, но не хотите вызвать файл .ReadLine() 20 раз. Я пытаюсь получить доступ к члену переменные через цикл

4b9b3361

Ответ 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;