0

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

函数签名是:public int ExecuteAscommand(List<string> Commands)

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

MSDN 将这种情况解释为 List 是性能优化的,但不是为继承而设计的。并且仅当它不用作可重用库时才抑制此警告。

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

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

4

2 回答 2

4

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

于 2013-08-07T05:43:58.700 回答
0

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

鉴于 List 的设计目的不是通过子类化来轻松扩展;List 的主要目的是快速实现内部实现。你会注意到它上面的方法不是虚拟的。

于 2013-08-07T06:00:08.507 回答