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