在参考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"

按照我的预期打印“真实”。 但是尝试使用另一个随机属性如DebuggerDisplay,索引器返回null:

var attrCollection = new AttributeCollection();
Console.WriteLine(attrCollection[typeof(System.Diagnostics.DebuggerDisplayAttribute)] != null);
> "False"

关于这些属性之间有什么不同的任何想法,导致不同的行为? 我不清楚msdn的“属性类型的默认值”是什么意思,因为它不仅仅是null。 我想也许问题是没有无参数构造函数的属性类型,但是BrowsableAttribute需要一个参数,DebuggerDisplayAttribute也是如此。

===============>>#1 票数:2 已采纳

它在AttributeDNollection的MSDN库文章中明确记录:

虽然大多数属性都有默认值,但不需要默认值。 如果属性没有默认值,则从采用类型的索引属性返回null。 定义自己的属性时,可以通过提供不带参数的构造函数或定义名为“Default”的属性类型的公共静态字段来声明默认值。

BrowsableAttribute具有默认值提供的默认值,因此您的测试成功。 默认情况下,当缺少属性时,它会使类成员可浏览。

DebuggerDisplayAttribute既没有默认构造函数也没有默认字段。 如果你考虑一下这是有意义的,没有有意义的默认值在调试器中有用。

  ask by Dexter Haslem translate from so

未解决问题?本站智能推荐: