编程语言
首页 > 编程语言> > c# – 可以隐藏属性上的属性吗?

c# – 可以隐藏属性上的属性吗?

作者:互联网

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

有问题的程序集是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

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

解决方法:

很难说清楚.我的第一个猜测是你可能使用typeof(SolrFieldAttribute)而不是typeof(SolrField).

标签:c,reflection,solrnet
来源: https://codeday.me/bug/20190530/1186148.html