.NET フレームワーク クラスで使用されるデバッガー ビジュアライザーは内部的なものです。typeof() を使用することはできません。ただし、バックドアがあります。[DebuggerTypeProxy] 属性には、文字列を受け入れるコンストラクターもあります。使用するものは Mscorlib_CollectionDebugView という名前で、ICollection<> を実装する任意のクラスを視覚化できます。使用例を次に示します。
[DebuggerTypeProxy("System.Collections.Generic.Mscorlib_CollectionDebugView`1, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
class MyCollection<T> : IList<T> {
private List<T> impl = new List<T>();
public int IndexOf(T item) { return impl.IndexOf(item); }
public void Insert(int index, T item) { impl.Insert(index, item); }
public void RemoveAt(int index) { impl.RemoveAt(index); }
public T this[int index] {
get { return impl[index]; }
set { impl[index] = value; }
}
public void Add(T item) { impl.Add(item); }
public void Clear() { impl.Clear(); }
public bool Contains(T item) { return impl.Contains(item); }
public void CopyTo(T[] array, int arrayIndex) { impl.CopyTo(array, arrayIndex); }
public int Count { get { return impl.Count; }}
public bool IsReadOnly { get { return ((System.Collections.IList)impl).IsReadOnly; }}
public bool Remove(T item) { return impl.Remove(item); }
public IEnumerator<T> GetEnumerator() { return impl.GetEnumerator(); }
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); }
}
バージョン番号が間違っていても、これは.NET 4.0でも機能します。そうしないと、内部クラスの名前を変更することにした場合、.NET の次のバージョンで壊れるリスクがあります。