通过Struct成员迭代

让我们说我们有一个结构

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

是否有可能通过使用foreach迭代结构的成员? 我已经阅读了一些有关反思的内容,但我不确定如何在此处应用。

结构中有大约20个变量。 我试图从文件读取值并尝试将它们分配给变量,但不想调用file.ReadLine()20次。 我试图通过循环访问成员变量

您可以使用Type.GetFields以与普通方式相同的方式应用reflection:

 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)); } 

请注意,如果struct公开属性(几乎可以肯定应该),您可以使用Type.GetProperties来获取它们。

(正如评论中所指出的那样,首先这可能不是一件好事,而且一般来说我对用户定义的结构有疑问,但我认为无论如何我都会包括实际答案……)

编辑:现在看来你有兴趣设置字段,由于值类型的工作方式稍微复杂一点(是的,这真的不应该是一个结构。)你想要一次打包 ,设置值单个盒装实例,然后在最后取消框:

 object boxed = new MyStruct(); // Call FieldInfo.SetValue(boxed, newValue) etc MyStruct unboxed = (MyStruct) boxed;