C# 保存列表<;T>;as函数参数发出警告

C# 保存列表<;T>;as函数参数发出警告,c#,.net,collections,msdn,generic-list,C#,.net,Collections,Msdn,Generic List,在运行代码分析时,我得到一个函数的警告 函数签名为:public int ExecuteAscommand(列出命令) 警告消息是:将列表更改为集合、只读集合或 KeyedCollection MSDN将此场景解释为列表为PerfRomanOptMizied,但不是为继承而设计的。并抑制此警告 仅当它未用作可重用库时 我的函数只不过是从列表中读取所有项目并使用数据执行任务。没有别的了。 但是这个函数是我正在构建的可重用库的一部分 我是否应该将参数类型从列表更改为任何其他类型?如果您仅枚举(读取所

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

函数签名为:
public int ExecuteAscommand(列出命令)

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

MSDN将此场景解释为列表为PerfRomanOptMizied,但不是为继承而设计的。并抑制此警告 仅当它未用作可重用库时

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


我是否应该将参数类型从列表更改为任何其他类型?

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

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

如果将集合公开为IList或任何类似内容,则可以将该列表用作实际的备份存储,但是您可以保留将来的可扩展性,因为您可以在以后交换Concerte实现,而无需更改类的公共契约


然而,列表的设计不便于通过子类化进行扩展;列表的主要目的是加快内部实现的速度。您会注意到它上面的方法不是虚拟的。

如果您将集合公开为IList或任何类似的内容,您可以使用该列表作为实际的备份存储,但您可以保留将来的扩展性,因为您可以在不更改类的公共约定的情况下交换Concerte实现

然而,列表的设计不便于通过子类化进行扩展;列表的主要目的是加快内部实现的速度。你会注意到上面的方法不是虚拟的