C# 按特定顺序排列的属性
使用反射,我有一个获取类属性的工具:C# 按特定顺序排列的属性,c#,reflection,C#,Reflection,使用反射,我有一个获取类属性的工具: foreach (MemberInfo member in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public)) { WriteValue(streamWriter, member.Name); } 是否有方法要求“GetProperties”按类中定义的顺序返回MemberInfo。我很怀疑,但我想我会问的 class Person { public
foreach (MemberInfo member in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
WriteValue(streamWriter, member.Name);
}
是否有方法要求“GetProperties”按类中定义的顺序返回MemberInfo。我很怀疑,但我想我会问的
class Person
{
public int Id { get; set; }
public int Age { get; set; }
}
我想按以下顺序获取MemberInfo:Id,年龄否,对于自动属性,没有。您可以使用调试符号按照声明的顺序获取方法,并且由于属性getter是方法,您可以(通过一些工作)按照声明的顺序获取带有显式getter(或setter)的属性列表,但是自动属性的getter没有源代码,因此没有调试符号来指示它们的位置。至于CLI元数据,编译器没有义务按声明顺序排列,而且由于反射完全依赖于元数据,因此不能将其用于此目的。[
注意:
请自行决定使用,因为这些显然是Microsoft的impl详细信息,在未来版本中可能会更改]
更新:单声道
从v3.5开始,我就在使用MS编译器时观察到一致性行为,当时我偶然发现:
using System;
using System.Linq;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
typeof(Test).GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
.OrderBy(member => member.MetadataToken).ToList()
.ForEach(member => Console.WriteLine(member.Name));
Console.ReadLine();
}
}
public class Test
{
public int SecondProperty { get; set; }
public int FirstProperty { get; set; }
}
}
也许你把一个问题分成了明显的和不可能的两部分。你需要这个做什么?