12

我很好奇是否有人有任何经验法则或最佳实践,什么时候返回延迟或在从函数返回之前IEnumerable<T>调用它是有意义的。ToArray()

例如,作为 API 的使用者,我认为我更喜欢在调用它时IEnumerable<Widget> GetWidgets()抛出一个方法HttpException,而不是在我枚举结果时抛出它。

public IEnumerable<Widget> GetWidgets(IEnumarable<int> widgetIds) {
    return widgetIds.Select(id => GetWidgetFromWidgetWebService(id));
}
4

2 回答 2

6

IEnumerable<T>当延迟没有明显的副作用时,我总是更喜欢返回延迟。例如,如果可枚举基于可能会更改的内部集合,我宁愿先评估它。

但是,如果正在计算可枚举等,那么我通常会推迟它。

于 2012-12-18T20:32:38.740 回答
1

如果实际上可以预期您的可枚举对象会抛出,请热切地评估它(如果可能的话)。您不希望错误发生在与错误原因无关的远程位置。您希望错误出现在它发生的地方。

毕竟,该方法并没有完成它的名字所宣传的内容,所以它应该抛出。

在这种情况下,我通常将返回类型更改为IList<T>以记录它急切地执行。

于 2012-12-18T20:41:49.163 回答