如何解决ObservableCollection 和 IList 继承的类的区别
我创建了两个不同的类。一类继承自 IList,另一类继承自 ObservableCollection。当我们为这些类创建实例时,我得到了以下结果。
继承自 IList
dput()
为 IList 维护的实例。
继承自 ObservableCollection
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Cells = new CellCollection();
}
private CellCollection cells;
public CellCollection Cells
{
get { return cells; }
set { cells = value; }
}
}
public class CellCollection : IList<OrderInfo>
{
public CellCollection()
{
}
public OrderInfo this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public bool IsReadOnly => throw new NotImplementedException();
public int Count => throw new NotImplementedException();
public void Clear()
{
throw new NotImplementedException();
}
public bool Contains(OrderInfo item)
{
throw new NotImplementedException();
}
public void CopyTo(OrderInfo[] array,int arrayIndex)
{
throw new NotImplementedException();
}
public IEnumerator<OrderInfo> GetEnumerator()
{
throw new NotImplementedException();
}
public int IndexOf(OrderInfo item)
{
throw new NotImplementedException();
}
public void Insert(int index,OrderInfo item)
{
throw new NotImplementedException();
}
public bool Remove(OrderInfo item)
{
throw new NotImplementedException();
}
public void RemoveAt(int index)
{
throw new NotImplementedException();
}
internal void Add(OrderInfo orderInfo)
{
}
void ICollection<OrderInfo>.Add(OrderInfo item)
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
}
实例不维护 Observable 集合,只维护计数
你能解释一下两者的区别吗?
解决方法
调试器使用 debugger attributes 注释类型。
如果类型不使用这些属性,则调用该类型的 ToString()
方法以获取文本表示。
ObservableCollection
使用这些方法之一来显示 Count
。您自己的 List
实现不执行这些操作,因此会调用基本 ToString()
方法,该方法仅返回类型名称。
因此,要为您自己的类型获得类似的结果,请实现 ToString()
或使用 CellCollection
注释您的 DebuggerDisplayAttribute
类。
当光标悬停在变量上时,可以看到变量名和实例的调试标签。
默认情况下,调试标签是 "tokens" : [
{
"token" : "some","start_offset" : 0,"end_offset" : 4,"type" : "word","position" : 0
},{
"token" : "some.test","end_offset" : 9,{
"token" : "some.test.domain","end_offset" : 16,{
"token" : "some.test.domain.com","end_offset" : 20,"position" : 0
}
]
}
{
"tokens" : [
{
"token" : "some.test.domain.com",{
"token" : "test.domain.com","start_offset" : 5,{
"token" : "domain.com","start_offset" : 10,{
"token" : "com","start_offset" : 17,"position" : 0
}
]
}
的结果。对于您的类 ToString
,方法 CellList
来自基类 ToString
并返回类的名称。此显示:CellList。
属性 DebuggerDisplay 允许定义实例的调试标签(不是字符串)。类 Object
继承自 CellCollection
而不是继承自 ObservableCollection<T>
和 the class Collection is declared with the attribute DebuggerDisplay。
Collection<T>
.NET 中的所有集合都是一样的,比如 List。
如果您在类 [DebuggerDisplay("Count = {Count}")]
public class Collection<T>: IList<T>,IList,IReadOnlyList<T>
上设置此属性,您将看到相同的调试标签。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。