IEnumerable&良好实践(& WCF)

时间:2011-08-29 14:40:56

标签: c# .net wcf ienumerable

在您不需要实际添加删除事物但只枚举它们时,在应用程序范围内使用IEnumerable是一个好习惯吗?< / p>

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

3 个答案:

答案 0 :(得分:13)

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

延迟评估可能是一个重要的考虑因素:如果您的实现可以抛出异常,则在调用者开始枚举结果之前不会抛出此异常。通过返回IList<T>ICollection<T>,您可以保证在调用方法时抛出任何异常。

对于WCF方法,从使用延迟评估的方法返回IEnumerable<T>意味着在序列化响应之前可能不会抛出任何异常 - 从而减少了在服务器端处理它的机会。 / p>

答案 1 :(得分:1)

我没有任何Good Practices资源,但我经常倾向于依赖List来获取我的集合并且它实现了IEnumerable但是我确实将它传递为List而不是IEnumerable,如果我需要它只读我宁愿传递一个ReadOnlyCollection ..

答案 2 :(得分:1)

我不想退回或接受IList<T>List<T>,因为它们意味着能够修改集合。

所以更喜欢将T[]作为固定大小的集合返回。此外,数组可以轻松映射到任何其他框架,平台等。

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