Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IEnumerable&;良好做法(WCF)_C#_.net_Wcf_Ienumerable - Fatal编程技术网

C# IEnumerable&;良好做法(WCF)

C# IEnumerable&;良好做法(WCF),c#,.net,wcf,ienumerable,C#,.net,Wcf,Ienumerable,在应用程序范围内使用IEnumerable是否是一种良好的做法,只要您不需要实际添加或删除内容,而只需要枚举它们 附带问题:从WCF服务返回IEnumerable时,您是否遇到过任何问题?这会给客户端应用程序带来问题吗?毕竟,我认为这将被序列化为一个数组。我没有任何好的实践来源,但我的集合通常依赖于列表,它实现了IEnumerable,但我确实将其作为列表而不是IEnumerable传递,如果我需要它是只读的,我宁愿传递一个只读集合。我不喜欢返回或接受IList或List,因为它们意味着可以修改

在应用程序范围内使用
IEnumerable
是否是一种良好的做法,只要您不需要实际添加或删除内容,而只需要枚举它们


附带问题:从WCF服务返回
IEnumerable
时,您是否遇到过任何问题?这会给客户端应用程序带来问题吗?毕竟,我认为这将被序列化为一个数组。

我没有任何好的实践来源,但我的集合通常依赖于列表,它实现了IEnumerable,但我确实将其作为列表而不是IEnumerable传递,如果我需要它是只读的,我宁愿传递一个只读集合。

我不喜欢返回或接受
IList
List
,因为它们意味着可以修改集合

因此,更愿意将
T[]
作为固定大小的集合返回。此外,阵列还可以轻松映射到任何其他框架、平台等


并且更愿意接受
IEnumerable
来强调方法将枚举该集合。

当我想提示调用方实现可能使用延迟求值时,我倾向于只返回
IEnumerable
。否则,我通常会返回
IList
ICollection
,如果结果应该是只读的,则实现为
ReadOnlyCollection

延迟计算可能是一个重要的考虑因素:如果您的实现可以引发异常,那么在调用方开始枚举结果之前不会引发异常。通过返回
IList
ICollection
,可以保证在调用该方法时抛出任何异常


对于WCF方法,从使用延迟求值的方法返回
IEnumerable
,这意味着在序列化响应之前可能不会引发任何异常,从而减少了在服务器端处理该异常的机会。

也许您应该添加您所说的语言?毕竟,这不是一个只有.net的站点……虽然这不是一个完全相同的站点,但我仍然建议您看看这个问题:T[]不是只读集合:您可以修改数组的元素。相反,IList并不意味着能够修改集合,例如,对于ReadOnlyCollection,IList.IsReadOnly是正确的。如果调用方不修改返回的集合很重要,那么最好返回IList并实现为不可变对象的只读集合。