什么时候返回延迟的 IEnumerable <T>是错误的表单



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

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

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

我总是喜欢在延迟没有明显副作用的情况下返回延迟IEnumerable<T>。 例如,如果枚举项基于可能会更改的内部集合,则我更愿意先对其进行评估。

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

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

毕竟,该方法没有完成其名称所宣传的内容,因此应该抛出。

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

最新更新