参考 System.ComponentModel.AttributeCollection.this[Type t] 索引器, http: //msdn.microsoft.com/en-us/library/yadycs8s.aspx上的文档说如下
如果集合中不存在该属性,则此属性返回该属性类型的默认值。
考虑到这一点,以下代码按预期工作:(> 表示输出)
using System.ComponentModel;
var attrCollection = new AttributeCollection();
Console.WriteLine(attrCollection[typeof(BrowsableAttribute)] != null);
> "True"
正如我所期望的那样打印“True”。但是尝试使用另一个随机属性(如 DebuggerDisplay)时,索引器返回 null:
var attrCollection = new AttributeCollection();
Console.WriteLine(attrCollection[typeof(System.Diagnostics.DebuggerDisplayAttribute)] != null);
> "False"
关于这些属性之间有什么不同导致不同行为的任何想法?我不清楚 msdn 的“属性类型的默认值”是什么意思,因为它不仅仅是 null。我认为问题可能是没有无参数构造函数的属性类型,但 BrowsableAttribute 需要一个参数,DebuggerDisplayAttribute 也是如此。