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 も同様です。