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

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

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