初始化ObservableCollection的长度<T>初始化List <T>的方式

dec*_*uet 4 c# list observablecollection

有没有办法初始化ObservableCollection<T>你可以的容量List<T>

例如:

var observableCollection = new ObservableCollection<int>(100);
Run Code Online (Sandbox Code Playgroud)

Mic*_*ter 7

不,那里没有.采用a 的构造函数之一,所以你可能认为你可以这样做:ObservableCollection<T>List<T>

new ObservableCollection<int>(new List<int>(100));
Run Code Online (Sandbox Code Playgroud)

但这不起作用.在内部,ObservableCollection复制列表,不考虑列表中的任何容量属性.您可以通过使用.NET Reflector查看构造函数来验证这一点.

  • @ user2449323是的,但**这里传递的列表长度为零,而不是100**.列表的*capacity*为100,但长度为零,因为列表中没有添加任何项目. (3认同)

小智 1

这是一个老问题了。但是,我认为可能值得知道的是,目前可以设置支持列表容量,但存在依赖内部实施的风险。

基类公开的 Items 属性Collection<T>当前实现为List<T>. 通过类型转换,您可以设置该属性的容量。

List<T>请注意,这确实依赖于和类的当前实现ObservableCollection<T>。如果您能够设置支持容量并且不用担心 .NET 实现会发生变化(例如,将支持列表更改为 Dictionary 或 HashSet),那么您应该创建一个新类来实现所需的接口。

您可以使用Microsoft 参考源以及.NET Reflector