0

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 には 1 つの引数が必要であり、DebuggerDisplayAttribute も同様です。

4

1 に答える 1