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 に答える