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到您的类中,并配置类型代理以扩展索引器的成员。

例如,查看 Mono 中的实现List<T>,它使用CollectionDebuggerView<T>调试器类型代理来实现此目的。

于 2013-03-22T02:16:59.730 回答
0

如果你扩展Results ViewliveSelect

你应该看到同样的事情someList

于 2013-03-22T00:42:41.617 回答
0

我认为您需要一个带有integer.

于 2013-03-22T00:43:08.643 回答