关于c#:为什么不在VB.NET中的Web服务参数中公开List(Of String)?

Why not expose List(Of String) in the parameters of web service in VB.NET?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C#: Difference between List and Collection (CA1002, Do not expose generic lists)

fxcop在一条规则中说,通用列表不应该暴露于外部世界。

但是我不明白为什么和什么是基因表的替代品?

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


原因是使用具体的List是为了实现细节,而您要公开一些更抽象的东西,例如IEnumerableICollection,它们只表示您想要公开的功能(例如可枚举、可变和/或可索引)。这为您以后更改实现提供了灵活性。

实际上,这个警告通常是通过返回IList而不是List来解决的,但其目的是让您思考"我实际上需要什么功能来保证我的呼叫者?"例如,也许我应该退回IEnumerableReadOnlyCollection,因为我不希望我的呼叫者弄乱退回的托收。


始终公开对象层次结构中适合您的方案的最低基类/接口。例如,如果此属性的使用者将只迭代它,请使用IEnumerable(Of T)。通过公开一个List,您将通过让客户机代码访问类的实现细节来破坏封装。


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