如何将类型FieldInfos/PropertyInfos作为MemberInfo数组按照它们在类中布局的顺序获取?
class Test
{
public bool First { get; set; }
public int Second;
public string Third { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 所以.NET 4.5引入了CallerMemberNameAttribute,对于任何使用WPF并实现的人来说,这似乎是天赐之物INotifyPropertyChanged- 我的问题是:4.5 5.0编译器本质上是否绑定/支持该属性,还是更多的环境语法糖助手,就像人们可以通过声明ExtensionAttribute自己的神奇,打开LINQ语法来伪造Visual Studio一样?
编辑:(对不起Jon!)我想我是否可以CallerMemberNameAttribute通过在适当的命名空间中重新声明属性来"启用" .NET 4.0中的功能,就像在.NET中"启用"LINQ查询语法一样2.0通过适当的ExtensionAttribute类声明.我强烈的怀疑是不,自然......
换句话说:我想知道如果CallerMemberName不升级到.NET 4.5/5,我是否可以从中受益
希望这更清楚......
NinjaEdit#2:叹息......版本编号惯例令人困惑!
精简版
Type.GetProperties它返回的集合的状态的MSDN文档不保证按字母顺序或声明顺序,但运行一个简单的测试表明,它通常以声明顺序返回.您是否知道具体情况不是这种情况?除此之外,建议的替代方案是什么?
详细版本
我意识到Type.GetProperties状态的MSDN文档:
GetProperties方法不以特定顺序返回属性,例如按字母顺序或声明顺序.您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同.
因此无法保证方法返回的集合将以任何特定方式进行排序.根据一些测试,我发现相反的返回属性按照它们在类型中定义的顺序出现.
例:
class Simple
{
public int FieldB { get; set; }
public string FieldA { get; set; }
public byte FieldC { get; set; }
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Simple Properties:");
foreach (var propInfo in typeof(Simple).GetProperties())
Console.WriteLine("\t{0}", propInfo.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Simple Properties:
FieldB
FieldA
FieldC
Run Code Online (Sandbox Code Playgroud)
一个这样的情况,这只是略有不同的是当有问题的类型的父母也有属性时:
class Parent
{
public int ParentFieldB { get; set; }
public string ParentFieldA { get; set; }
public byte …Run Code Online (Sandbox Code Playgroud) public enum CurrencyId
{
USD = 840,
UAH = 980,
RUR = 643,
EUR = 978,
KZT = 398,
UNSUPPORTED = 0
}
Run Code Online (Sandbox Code Playgroud)
有没有办法Enum.GetValues(typeof(CurrencyId)).Cast<CurrencyId>()按顺序对结果进行排序?它们是在.cs文件(USD,UAH,RUR,EUR,KZT,UNSUPPORTED)中声明的,而不是它们的底层代码?就个人而言,我认为答案是'不',因为原始订单在二进制文件中丢失,所以...我该如何实现任务?
嗨,我有一个派生自另一个班级的班级.像这样 :
public class Customer
{
public string Date{ get; set; }
public string InstallationNo{ get; set; }
public string SerialNo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个名为Customer_U的类,该类派生自Customer
public class Customer_U:Customer
{
public string Bill{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个简单的问题.我有很多时间谷歌,但没有答案.我的列表中填充了以下数据:
List<Customer_U> customer= new List<Customer_U>() 我使用此列表创建一个Excel.在excel colum顺序是这样的:
比尔---日期--- InstalltionNo --- SerialNo.
我想要这个订单.我希望"比尔"成员成为最后一栏.如何在从另一个类派生的类中创建成员的顺序
请参考此代码
public class A : B
{
[Display(Name = "Initial Score Code", Order =3)]
public Code { get; set; }
[Display(Name = "Initial Score Code", Order =2)]
public Name{ get; set; }
............
}
Run Code Online (Sandbox Code Playgroud)
我需要通过order的orderAttribute按顺序获取类的所有属性.我试过这个代码
var prop = typeof(A)
.GetProperties()
.OrderBy(p => ((DisplayAttribute)p.GetCustomAttributes(typeof(DisplayAttribute), true).FirstOrDefault).Order);
Run Code Online (Sandbox Code Playgroud)
但它会导致错误
对象引用不设置对象的实例
我假设这个问题是因为某些属性在"DisplayAttribute"中没有"Order"属性.
如何处理这种情况?我需要订购所有属性,即使某些属性没有order属性的值.