保留列表<;T>;作为函数参数给出警告

本文关键字:函数 参数 警告 gt 列表 lt 保留 | 更新日期: 2023-09-27 18:26:50

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

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

警告消息为:将列表更改为集合、只读集合或KeyedCollection。

MSDN将这种情况解释为List是经过优化的,但不是为继承而设计的只有当它不被用作可重复使用的库时。

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

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

保留列表<;T>;作为函数参数给出警告

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

如果您将集合公开为IList或任何类似的东西,您可以使用List作为实际的后备存储,但您保留了未来的可扩展性,因为您可以在以后交换concete实现,而无需更改类的公共契约。

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