6

我想知道 ObservableCollection 是否可以保证在 C# 中保持插入其中的元素的顺序。我查看了 MSDN 站点,但找不到答案。

4

3 回答 3

11

是的。

ObservableCollection<T>implements IList<T>,这意味着项目按您指定的顺序存储。


作为一般规则,这是 .NET 中基本集合类型的工作方式。

IEnumerable<T>允许您以未指定的顺序一次访问一个项目。

ICollection<T>除了IEnumerable<T>功能之外,还允许您添加和删除项目,并访问集合的总大小。

IList<T>除了ICollection<T>功能之外,还允许您按索引访问项目并在任意索引处插入和删除项目。

于 2013-05-22T14:12:42.857 回答
5

它派生自Collection<T>,用于IList<T> items存储数据。例如,当添加和删除项目时,ObservableCollection只需将调用委托给基类。

protected override void InsertItem(int index, T item)
{
  this.CheckReentrancy();
  base.InsertItem(index, item);
  this.OnPropertyChanged("Count");
  this.OnPropertyChanged("Item[]");
  this.OnCollectionChanged(NotifyCollectionChangedAction.Add, (object) item, index);
}

Collection在 C# 中的有序数据结构中,因此插入和删除后项目的相对顺序不应该改变。

于 2013-05-22T14:12:23.420 回答
5

请参阅ObservableCollection 类 MSDN文档的以下摘录:

方法:

Add         Adds an object to the *end* of the Collection<T>. (Inherited from Collection<T>.)

Insert      Inserts an element into the Collection<T> at the *specified index*. (Inherited from Collection<T>.)

InsertItem  Inserts an item into the collection at the *specified index*. (Overrides Collection<T>.InsertItem(Int32, T).)

显式接口实现:

IList.Add      Adds an item to the IList. (Inherited from Collection<T>.)

IList.Insert   Inserts an item into the IList at the specified index. (Inherited from Collection<T>.)
于 2013-05-22T14:25:58.110 回答