让我们说我们有一个结构体
Struct myStruct { int var1; int var2; string var3; . . }
可能使用foreach可以遍历结构的成员吗?我已经反思了一些事情,但我不知道如何在这里申请.
There are about 20 variables in the struct. I am trying to read values
off a file and trying to assign them to the variables but don’t want
to call file.ReadLine() 20 times. I am trying to access the member
variables through a loop
解决方法
你应用反常的方法和正常情况一样,使用
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来获取这些属性.
(如评论中所述,这可能不是一件好事,首先,一般来说,我怀疑用户定义的结构,但我以为我会包括实际的答案…)
编辑:现在看起来你有兴趣设置字段,这是比较复杂的,因为值类型的工作方式(是的,这真的不应该是一个结构体.)你会想要一次,设置值单个盒装实例,然后在最后的unBox:
object Boxed = new MyStruct(); // Call FieldInfo.SetValue(Boxed,newValue) etc MyStruct unBoxed = (MyStruct) Boxed;