在运行代码分析时,我收到一个函数警告。
功能签名是:public int ExecuteAscommand(List<string> Commands)
警告消息是:将列表更改为Collection,Readonlycollection或 KeyedCollection。
MSDN解释了这种情况,因为List是perfromance optmizied,但不是为继承而设计的。并且禁止此警告 只有当它不被用作可重复使用的库时。
我的功能只是从列表中读取所有项目并执行数据任务。没有别的。 但是这个函数是我正在构建的可重用库的一部分。
我应该将参数类型从List更改为任何其他类型吗?
答案 0 :(得分:4)
如果您只是枚举(读取所有)命令,则您的界面应为IEnumerable<string>
类型。这样,您的用户可以传递实现该接口的任何内容:数组,列表,集合或可以放入foreach循环的任何其他内容。
答案 1 :(得分:0)
如果您将集合公开为IList或类似的东西,则可以使用List作为实际的后备存储,但是您可以保留将来的可扩展性,因为您可以在不更改类的公共合同的情况下更换concerete实现。
而List的设计并不容易通过子类化来扩展; List的主要目的是快速进行内部实现。您会注意到它上面的方法不是虚拟的。