Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是新的可观察集合<;对象>;(ObjEnumerable.ToList())是否与Foreach和add相同?_C# - Fatal编程技术网

C# 是新的可观察集合<;对象>;(ObjEnumerable.ToList())是否与Foreach和add相同?

C# 是新的可观察集合<;对象>;(ObjEnumerable.ToList())是否与Foreach和add相同?,c#,C#,以下两个代码段之间是否存在性能差异 1. IEnumerable可枚举=。。。 var observableCollection=新的observableCollection(enumerable.ToList()); 2. IEnumerable可枚举=。。。 var observableCollection=新的observableCollection(); foreach(可枚举中的对象o) { 增加(o); } 是的,存在性能差异。第二种方法将为列表中的每个项目引发Collection

以下两个代码段之间是否存在性能差异

1.
IEnumerable可枚举=。。。
var observableCollection=新的observableCollection(enumerable.ToList());
2.
IEnumerable可枚举=。。。
var observableCollection=新的observableCollection();
foreach(可枚举中的对象o)
{
增加(o);
}

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

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

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


如果您订阅的是
CollectionChanged
事件,并希望对每个项目做出反应,则无法使用第一种方法执行此操作。

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

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

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


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

不要猜测。测量它。第一个创建一个额外的
列表
不要猜测。测量它。第一个创建一个额外的
列表
是的,我需要将它绑定到WPF中的UI。这就是我问这个问题的原因。我能让它绑定到UI的唯一方法是使用方法2,但我想知道是否有任何性能问题。嗯,现在我想知道,在我完成添加所有项目之前,如何忽略CollectionChange事件……我建议使用第一种方法。如果ObservableCollection是ViewModel上的一个属性,请确保在分配属性后为该属性激发
PropertyChanged
。是的,我需要将其绑定到WPF中的UI。这就是我问这个问题的原因。我能让它绑定到UI的唯一方法是使用方法2,但我想知道是否有任何性能问题。嗯,现在我想知道,在我完成添加所有项目之前,如何忽略CollectionChange事件……我建议使用第一种方法。如果ObservableCollection是ViewModel上的一个属性,请确保在分配属性后为该属性激发
PropertyChanged
IEnumerable<object> enumerable = ...
var observableCollection = new ObservableCollection<object>(enumerable.ToList());
IEnumerable<object> enumerable = ...
var observableCollection = new ObservableCollection<object>();
foreach (object o in enumerable)
{
  observableCollection.Add(o);
}