Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按照声明成员的顺序获取类的MemberInfos?_C#_Propertyinfo_Fieldinfo_Memberinfo - Fatal编程技术网

C# 如何按照声明成员的顺序获取类的MemberInfos?

C# 如何按照声明成员的顺序获取类的MemberInfos?,c#,propertyinfo,fieldinfo,memberinfo,C#,Propertyinfo,Fieldinfo,Memberinfo,假设我有以下课程: public class Target { public int field1; public int field2; public int Prop1 { get; set; } public int Prop2 { get; set; } } 如果我做了一件事: foreach(far f in typeof(Target).GetFields()) Console.WriteLine(f.Name); 我将按照字段1和字段2中声明的顺序

假设我有以下课程:

public class Target
{
   public int field1;
   public int field2;
   public int Prop1 { get; set; }
   public int Prop2 { get; set; }
}
如果我做了一件事:

foreach(far f in typeof(Target).GetFields())
   Console.WriteLine(f.Name);
我将按照字段1和字段2中声明的顺序获取字段。如果我做了同样的事情

现在,考虑以下内容:

public class Target
{
   public int field1;
   public int Prop1 { get; set; }
   public int field2;
   public int Prop2 { get; set; }
}
当我这样做的时候:

    var members = typeof(Target).GetMembers()
                 .Where(m => m.MemberType == MemberTypes.Field ||
                             m.MemberType == MemberTypes.Property);

    foreach (var m in members)
        Console.WriteLine(m.Name);
我得到了以下输出:

Prop1
Prop2
field1
field2
显然,成员的声明顺序不是field1、Prop1、field2和Prop2

我有没有办法把会员按这个顺序排列

谢谢

编辑:

我关心顺序,因为我使用Unity3D游戏引擎,并且正在为特定类型编写自定义编辑器。类型将具有字段和属性,我希望按照声明的顺序绘制字段/属性。当然,unity确实会按照字段声明的顺序绘制字段,但它不会绘制属性。这就是为什么我要制作自己的抽屉/编辑器来支持属性绘图


很抱歉,但我必须问一下,有没有一个很好的理由不使用字段属性来防止此类问题?为什么您会担心顺序?我相信,对于任何成员类型,成员反映出来的顺序是编译器将元数据写入生成程序集的方式的一个实现细节。你不应该依赖于成员声明的顺序,同样,这是一个实现细节。