请参考此代码
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; }
............
}
我需要通过Display的orderAttribute通过order获取类的所有属性。我已经尝试使用此代码来做
var prop = typeof(A)
.GetProperties()
.OrderBy(p => ((DisplayAttribute)p.GetCustomAttributes(typeof(DisplayAttribute), true).FirstOrDefault).Order);
但这会导致错误
对象引用不设置对象的实例
由于某些属性在“ DisplayAttribute”中不具有“ Order”属性,因此我假定了此问题。
如何处理这种情况?即使某些属性不具有order属性的值,我也需要对所有属性进行排序。
你缺少支架()
上FirstOrDefault
操作。还应该处理返回默认值的情况。我建议Order
在获取第一个或默认值之前选择值。这将返回0
所有不具有的属性DisplayAttribute
:
var prop = typeof(A)
.GetProperties()
.OrderBy(p => p.GetCustomAttributes(typeof(DisplayAttribute), true)
.Cast<DisplayAttribute>()
.Select(a => a.Order)
.FirstOrDefault());
如果希望不带DisplayAttribute的属性位于最后,则可以提供Int32.MaxValue
要返回的默认值:
.Select(a => a.Order)
.DefaultIfEmpty(Int32.MaxValue)
.First()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句