新的ObservableCollection <object>(ObjEnumerable.ToList())是否与Foreach相同并添加?

Kin*_*han 0 c#

以下两个片段之间是否有任何性能差异?

1

IEnumerable<object> enumerable = ...
var observableCollection = new ObservableCollection<object>(enumerable.ToList());
Run Code Online (Sandbox Code Playgroud)

2

IEnumerable<object> enumerable = ...
var observableCollection = new ObservableCollection<object>();
foreach (object o in enumerable)
{
  observableCollection.Add(o);
}
Run Code Online (Sandbox Code Playgroud)

cad*_*ll0 5

是的,有性能差异.第二种方法将为CollectionChanged列表中的每个项目引发事件.首先不会.

如果您未在创建集合和添加项目之间订阅事件,则可能会忽略此项.

如果objOCollection在添加项目之前将其分配给UI,则可能导致UI在添加项目时执行不佳,因为必须为每个更改刷新.完整地创建集合(无论是通过构造函数还是添加项目)然后将其分配给UI将避免这种情况.

如果您正在订阅该CollectionChanged事件并希望对每个项目做出反应,那么您将无法使用第一种方法执行此操作.