Best way of using List<T> and exposing Collection<T>
我必须实现一个公开值列表(整数、自定义类等)的Web服务。我的工作解决方案返回一个
如果我选择返回
To be XML serializable, types which inherit from
ICollection must have an implementation ofAdd(System.Int32) at all levels of their inheritance hierarchy.
System.Collections.ObjectModel.ReadOnlyCollection 1 [[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] does not implementAdd(System.Int32) .
您最喜欢在内部使用
在这种情况下,list
对于原始问题,您可以在集合中非常简单地包装一个列表
这是一个真正的包装器;向包装器(col)中添加一个项,然后将其添加到列表中。这可能有点令人困惑,因为许多这样的构造函数使用参数进行初始填充,但不链接到原始列表。collection
因为您在Web服务边界上,所以fxcop的建议不适用。这对于防止调用者踩踏被调用者的内存非常有用(与EricLippert最近的博客保持一致),但是在一个简单不适用的Web服务分布式场景中。事实上,由于Web服务在某些通用场景中存在一些有良好文档记录的问题,因此在Web服务边界上,一个简单的数组可以说是非常有用和实用的。在Eric的博客中-在本例中,没有关于呼叫者/被呼叫者问题的问题,因为这两者之间存在强制屏障。
就WSDL/MEX而言,我怀疑所有3个(列表/集合/数组)都将成为一个元素块——所以您可以选择最方便的元素。
我通常从wcf web服务返回ilist