System.ComponentModel.DataAnnotations.DisplayAttribute具有属性(例如AutoGenerateField,AutoGenerateFilter,Order)。如果未设置这些属性中的任何一个,则在尝试读取时会出错。
object valAttrProp ;
var atProp = attrInstance.GetType().GetProperties();
foreach (var propInfo in atProp)
{
if (propInfo.CanRead )
{
try
{
// all bottom lines generate an exception...
// valAttrProp = propInfo.GetGetMethod().Invoke(attrInstance,null);
// valAttrProp = valAttrProp.GetAccessors()[0].Invoke(attrInstance, null);
// even with direct accessor:
// valAttrProp = ((System.ComponentModel.DataAnnotations.DisplayAttribute)attrInstance).Order;
valAttrProp = propInfo.GetValue(attrInstance);
}
catch
{
valAttrProp = null;
}
if (valAttrProp != null)
{
// ...proccessing
}
}
}
我如何找出:是否设置了attrs而没有try-catch块?
答案 0 :(得分:0)
我终于明白了拉瑟·沃格瑟尔·卡尔森(LasseVågsætherKarlsen)在说什么。
对于许多属性(例如AutoGenerateField
),文档中有一个备注:
请勿使用此属性访问AutoGenerateField属性。 而是使用GetAutoGenerateField方法。
但是由于某种原因,Order
字段没有这样的注释,但是在我看来,在这种情况下,放置指向相应方法的链接是合乎逻辑的
在类GetGetMethod
的{{1}}字段中。但是由于某种原因,存在方法PropertyInfo
(可能是get-accessor?)。我想通过反射收到指向所需方法的链接,
否则,解决方案不好:
get_PropName