将List <t>保留为功能参数会发出警告</t>

时间:2013-08-07 05:38:39

标签: c# .net collections msdn generic-list

在运行代码分析时,我收到一个函数警告。

功能签名是:public int ExecuteAscommand(List<string> Commands)

警告消息是:将列表更改为Collection,Readonlycollection或 KeyedCollection。

MSDN解释了这种情况,因为List是perfromance optmizied,但不是为继承而设计的。并且禁止此警告 只有当它不被用作可重复使用的库时。

我的功能只是从列表中读取所有项目并执行数据任务。没有别的。 但是这个函数是我正在构建的可重用库的一部分。

我应该将参数类型从List更改为任何其他类型吗?

2 个答案:

答案 0 :(得分:4)

如果您只是枚举(读取所有)命令,则您的界面应为IEnumerable<string>类型。这样,您的用户可以传递实现该接口的任何内容:数组,列表,集合或可以放入foreach循环的任何其他内容。

答案 1 :(得分:0)

如果您将集合公开为IList或类似的东西,则可以使用List作为实际的后备存储,但是您可以保留将来的可扩展性,因为您可以在不更改类的公共合同的情况下更换concerete实现。

而List的设计并不容易通过子类化来扩展; List的主要目的是快速进行内部实现。您会注意到它上面的方法不是虚拟的。