可以隐藏属性上的属性吗?

时间:2011-08-25 21:07:28

标签: c# reflection solrnet

我试图使用反射来确定Type的哪些属性具有某个属性。当我自己创建自定义属性时,这似乎工作正常,但目前不适用于第三方程序集中的属性。

有问题的程序集是SolrNet,属性类型为SolrField

带有用法的示例类:

public class PublicDocument : SearchItem {

    [SolrField("case")]
    public string CaseNumber { get; set; }

    [SolrField("case_name")]
    public string CaseName { get; set; }
}

这是我获取这些属性的代码。好奇的是property.Attributes是空的! 编辑:再次查看之后,即使使用其他自定义类型,此属性也将为空,并且似乎是为框架属性保留的。

        PublicDocument item = new PublicDocument();
        foreach (PropertyInfo property in item.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) {

            foreach (object attribute in property.GetCustomAttributes(typeof(SolrField), true)) {
                //do some stuff here
            }
        }

SolrField在此处定义:https://github.com/mausch/SolrNet/blob/master/SolrNet/Attributes/SolrFieldAttribute.cs

正如我所说,这个相同的代码可以在我自己的一个程序集中定义的属性中工作,并以相同的模式使用。所以我的问题是,可以将属性标记为不通过这样的反射显示,还是会出现另一个问题?

1 个答案:

答案 0 :(得分:6)

很难确定。我的第一个猜测是,您可以使用typeof(SolrFieldAttribute)代替typeof(SolrField)