这是编译器错误(为了便于阅读,略有改动).
这个总是困惑我.FxCop告诉我返回List是一件坏事,而派生的Collection
派对应该是优先的返回类型.
此外,FxCop表示可以List
用于内部数据存储\操作.好吧,我明白了,但我没有得到的是编译器抱怨尝试隐式转换List
为Collection
.没有List
更多的接口充电和功能?为什么要禁止隐式转换?
另一个源于上述问题:new List
构造函数昂贵吗?
谢谢,
瓦伦丁瓦西里耶夫
为什么不这样做:
Collectioncollection = new Collection (theList);
as Collection(IList输入)将List作为构造的一部分.
List
不是来自Collection
- 它确实实现了ICollection
.这将是返回类型的更好选择.
至于new List
问题 - 它部分取决于收集的内容.如果它实现ICollection
(在执行时),那么构造函数可以使用其Count
属性创建具有正确初始容量的列表,然后迭代它并添加每个项目.如果它没有实现ICollection
那么它只相当于:
Listlist = new List (); foreach (int x in otherCollection) { list.Add(x); }
在一个方便的构造函数中仍然很好,但效率不高 - 它不可能,真的.
我不相信构造函数会对数组做任何狡猾的事情,它可能会使用Array.Copy
或者只是一次性复制批次而不是迭代.(同样,如果它是另一个,List
它可以进入后备阵列并直接复制.)
List
不继承自Collection
.干净利落.除非List
提供操作符隐式转换为/从Collection
,否则您无法执行此操作.我实际上会建议List
你回来,因为我相信这些规则是这样的:
作为参数接受可能的最不紧缩的接口.作为返回参数返回可能的最紧缩类型.