0

クラスをこのように表示したい:

スクリーンショット

しかし、liveSelect代わりに上記のように表示されています。これが私のクラスの宣言です:

public class LiveSelect<TSource, TResult> : ReadOnlyBindingList<TResult>, IList, ICollection, IEnumerable
{
    //...
}

ReadOnlyBindingList実装しIBindingListます。私は何が欠けていますか?

更新: 280Z28 の回答に基づいて、どこで解決したか:

internal sealed class CollectionDebuggerView<T>
{
    readonly ICollection<T> c;

    public CollectionDebuggerView(ICollection<T> col)
    {
        this.c = col;
    }

    [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
    public T[] Items
    {
        get { return c.ToArray(); }
    }
}

次に、ReadOnlyBindingList<TResult>クラスICollection<T>にいくつかの属性を実装して追加し、次のようにします。

[DebuggerDisplay("Count={Count}")]
[DebuggerTypeProxy(typeof(CollectionDebuggerView<>))]
public abstract class ReadOnlyBindingList<TResult> : IBindingList, IList, IEnumerable, IEnumerable<TResult>, ICollection, ICollection<TResult>
{
    //...
}

CollectionDebuggerView実装する何かReadOnlyBindingList( など) をコンストラクターに取り込む必要があることに注意してくださいICollection<T>

4

3 に答える 3

1

別の Stack Overflow Q/Aに基づい[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]て、インデクサー プロパティの属性を試す最初の提案が機能しない可能性があるようです。

をクラスに追加しDebuggerTypeProxyAttribute、タイプ プロキシを構成してインデクサーのメンバーを展開する必要があります。

例として、まさにこの目的のためにデバッガ型プロキシを使用する in Monoの実装を見てください。List<T>CollectionDebuggerView<T>

于 2013-03-22T02:16:59.730 に答える
0

Results Viewから展開するとliveSelect

あなたは同じものを見るべきですsomeList

于 2013-03-22T00:42:41.617 に答える
0

を取るインデックスプロパティが必要だと思いますinteger

于 2013-03-22T00:43:08.643 に答える