通过Struct成员迭代

时间:2011-09-30 17:13:31

标签: c#

让我们说我们有一个结构

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

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

  

结构中有大约20个变量。我正在尝试阅读价值观   关闭文件并尝试将它们分配给变量但不想要   调用file.ReadLine()20次。我正在尝试访问该成员   变量通过循环

1 个答案:

答案 0 :(得分:34)

您使用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来获取这些属性。

(如评论中所述,首先这可能不是一件好事,而一般我怀疑用户定义的结构,但我想我会无论如何都包括实际的答案......)

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

object boxed = new MyStruct();

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

MyStruct unboxed = (MyStruct) boxed;