我正在尝试获取每个属性的所有属性,但是我无法弄清楚如何这样做。我尝试了几种不同的方式,但我觉得我错了。这是一个类及其属性属性的示例。任何见解都会非常感激!
[SitecoreType(TemplateId= "{60E73011-0E01-4C13-A9A4-FAF8FF607930}", AutoMap= true)]
public class CalUserResults : BaseItem
{
[IndexField("calcpa_user_name")]
[SitecoreField("CalCPA User Name")]
public virtual string CalUserName{ get; set; }
}
具体来说,我正在尝试获取IndexField和SitecoreField。谢谢!
编辑我尝试过的东西......
CalUserResults kf = new CalUserResults();
Glass.Mapper.Sc.Configuration.Attributes.SitecoreFieldAttribute attribute = kf.
GetType().
GetMethod("CalUserName").
GetCustomAttributes(false).
Cast<Glass.Mapper.Sc.Configuration.Attributes.SitecoreFieldAttribute>().
SingleOrDefault();
和
尝试使用FieldInfo
答案 0 :(得分:1)
问题来源:
LINQ Cast<T>
方法尝试将IEnumerable
中的每个属性强制转换为给定类型。它失败了,因为你的方法有另一个IndexField
类型的属性。这就是你在执行查询时获得InvalidCastException的原因。
<强> SOLUTION:强>
解决问题的方法是使用LINQ OfType<T>
方法。它根据强制转换操作的成功过滤IEnumerable
:
Glass.Mapper.Sc.Configuration.Attributes.SitecoreFieldAttribute attribute = kf.
GetType().
GetProperty("CalUserName").
GetCustomAttributes(false).
OfType<Glass.Mapper.Sc.Configuration.Attributes.SitecoreFieldAttribute>().
SingleOrDefault();
P.S。:此外,您可能需要阅读When to use Cast() and Oftype() in Linq来澄清问题并提高对LINQ的理解。