让我们说我们有一个结构
Struct myStruct
{
int var1;
int var2;
string var3;
.
.
}
是否可以通过使用foreach迭代结构的成员?我已经阅读了一些有关反思的内容,但我不确定如何在此处应用。
结构中有大约20个变量。我正在尝试阅读价值观 关闭文件并尝试将它们分配给变量但不想要 调用file.ReadLine()20次。我正在尝试访问该成员 变量通过循环
答案 0 :(得分:34)
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;