0

我正在尝试获取类中每个属性的所有属性,但是我无法弄清楚如何做到这一点。我尝试了几种不同的方法,但我觉得我做错了。这是该类及其具有属性的属性的示例。任何见解将不胜感激!

[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

4

1 回答 1

1

问题的根源:

LINQCast<T>方法尝试将 中的每个属性IEnumerable转换为给定类型。它失败了,因为你的方法有另一个IndexField类型的属性。这就是您在执行查询时收到InvalidCastException的原因。

解决方案:

您需要解决的问题是使用 LINQOfType<T>方法。IEnumerable它根据转换操作的成功进行过滤:

 Glass.Mapper.Sc.Configuration.Attributes.SitecoreFieldAttribute attribute = kf. 
     GetType().  
     GetProperty("CalUserName").
     GetCustomAttributes(false). 
     OfType<Glass.Mapper.Sc.Configuration.Attributes.SitecoreFieldAttribute>(). 
     SingleOrDefault();

PS:您可能还想阅读何时在 Linq 中使用 Cast() 和 Oftype()以澄清问题并提高对 LINQ 的理解。

于 2014-08-07T17:42:59.223 回答