Перебор элементов структуры

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

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

Можно ли перебирать 9X_visual-c# элементы структуры с помощью foreach? Я 9X_c# прочитал кое-что по размышлениям, но не 9X_csharp знаю, как применить это здесь.

В структуре 9X_.cs-file около 20 переменных. Я пытаюсь читать ценности из 9X_c#-language файла и пытается назначить их переменным, но 9X_c#.net не хочет вызвать file.ReadLine() 20 раз. Я 9X_visual-c# пытаюсь получить доступ к члену переменные 9X_c#.net через цикл

20
2

  • @HenkHolterman: Да, я не особо возражаю против ограничения размера, но это почти наверняка не «логически представляет одно ...
1
Общее количество ответов: 1

Ответ #1

Ответ на вопрос: Перебор элементов структуры

Вы применяете отражение почти так же, как 9X_c-sharp обычно, используя 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));
}

Обратите внимание, что 9X_csharp если структура предоставляет свойства (что 9X_c#-language почти наверняка и должно), вы можете использовать 9X_c# Type.GetProperties для их получения.

(Как отмечалось в комментариях, это 9X_csharp может быть не очень хорошо, в первую очередь, и 9X_.cs-file в целом я с подозрением отношусь к определяемым 9X_c#-language пользователем структурам, но я подумал, что 9X_c#.net все равно включите фактический ответ ...)

РЕДАКТИРОВАТЬ: теперь, похоже, вас 9X_.cs-file интересует настройка полей, что немного сложнее из-за 9X_c#-language того, как работают типы значений (и да, это 9X_c#.net действительно не должно быть структурой.) Вы захотите 9X_c#-language поместить один раз в коробку, установить значения 9X_c-sharp в единственном экземпляре в коробке, а затем 9X_c# распаковать в конце:

object boxed = new MyStruct();

// Call FieldInfo.SetValue(boxed, newValue) etc

MyStruct unboxed = (MyStruct) boxed;

43
0