클래스의 정보 표현2

|

다음은 MyClassCollection 클래스의 디버깅 시의 표현되는 정보입니다.

List<T>와는 다르게 내부의 요소의 값을 확인하는데 어려움이 존재합니다.
이것을 List<T>처럼 구성해 보겠습니다.

[System.Diagnostics.DebuggerDisplay("{Value}", Name = "{Name}")]
class MyClass
{
    public String Name;
    public String Value;

    public MyClass(String name, String value)
    {
        this.Name = name;
        this.Value = value;
    }
}

[System.Diagnostics.DebuggerDisplay("Count = {Count}")]
[System.Diagnostics.DebuggerTypeProxy(typeof(CollectionDebugView))]
class MyClassCollection : CollectionBase, ICollection
{
    public MyClass Add(String name, String value)
    {
        Int32 i = base.InnerList.Add(new MyClass(name, value));
        return base.InnerList[i] as MyClass;
    }
}

class CollectionDebugView
{
    private ICollection collection;

    public CollectionDebugView(ICollection collection)
    {
        this.collection = collection;
    }

    [System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.RootHidden)]
    public MyClass[] MyClasses
    {
        get
        {
            List<myclass> myClasses = new List<myclass>(collection.Count);
            foreach (object key in collection)
            {
                MyClass myClass = key as MyClass;
                if (myClass != null)
                {
                    myClasses.Add(myClass);
                }
            }
            return myClasses.ToArray();
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyClassCollection col = new MyClassCollection();
        col.Add("Name1", "Value1");
    }
}

위처럼 구성하면 아래와 같이 보이게 됩니다.

이처럼 보이기 위하여 DebuggerTypeProxyAttribute와 DebuggerBrowsable를 이용하였습니다.

참조 : MSDN


And