加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 通过Struct成员迭代

发布时间:2020-12-15 17:36:55 所属栏目:百科 来源:网络整理
导读:让我们说我们有一个结构体 Struct myStruct{ int var1; int var2; string var3; . .} 可能使用foreach可以遍历结构的成员吗?我已经反思了一些事情,但我不知道如何在这里申请. There are about 20 variables in the struct. I am trying to read values off
让我们说我们有一个结构体
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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读