通过Struct成员迭代

kr1*_*r13 17 c#

让我们说我们有一个结构

Struct myStruct
{
   int var1;
   int var2;
   string var3;
   .
   .
}
Run Code Online (Sandbox Code Playgroud)

是否有可能通过使用foreach迭代结构的成员?我已经阅读了一些有关反思的内容,但我不知道如何在这里应用.

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

Jon*_*eet 35

您可以使用与正常情况相同的方式应用反射,使用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));
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

object boxed = new MyStruct();

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

MyStruct unboxed = (MyStruct) boxed;
Run Code Online (Sandbox Code Playgroud)