4

可能重复:
C#:List<T> 和 Collection<T> 之间的区别(CA1002,不要公开通用列表)

FxCop 在规则中规定,通用列表不应暴露给外界。

但我不明白为什么以及什么是通用列表的替代品?

参考:http: //msdn.microsoft.com/en-in/library/ms182142%28en-us%29.aspx

4

3 回答 3

13

原因是具体的使用List<T>意味着实现细节,并且你意味着公开一些更抽象的东西,例如IEnumerable<T>or ICollection<T>,它只代表你想要公开的功能(例如可枚举、可变和/或可转位)。这使您可以灵活地在以后更改实现。

在实践中,此警告通常通过返回IList<T>而不是 来解决List<T>,但其想法是提示您思考“我实际上需要什么功能来保证我的调用者?” 例如,也许我应该返回或者因为我不希望我的调用者弄乱返回的集合。IEnumerable<T>ReadOnlyCollection<T>

于 2009-12-09T06:45:20.770 回答
2

始终公开对象层次结构中适合您的场景的最低基类/接口。例如,如果此属性的使用者仅对其进行迭代,请使用IEnumerable(Of T). 通过List<T>让客户端代码访问您的类的实现细节,您正在破坏封装。

于 2009-12-09T06:42:33.857 回答
1

通用列表是一种 .NET 结构,但 Web 服务通常旨在与其他框架进行互操作。

于 2009-12-09T06:42:48.117 回答