コンテキスト: 同僚にメールを送信し、Enumerable.Empty<T>()
何もせずに空のコレクションを返す方法について説明しましreturn new List<T>();
た。特定の型を公開しないという欠点があるという返信がありました。
それは小さな問題を提示します。戻り値の型についてできるだけ具体的にすることは常に良いことです* (したがって、List<> を返す場合は、それを戻り値の型にします)。これは、Lists や Arrays などに便利なメソッドが追加されているためです。さらに、呼び出し元のメソッドからコレクションを使用するときにパフォーマンスを考慮する場合にも役立ちます。
以下のトリックは、残念ながら IEnumerable を返すことを強制しますが、これは可能な限り非具体的ですよね? :(
* これは実際には .NET 設計ガイドラインからのものです。ガイドラインに記載されている理由は、私がここで言及しているものと同じだと思います。
これは、私が学んだこととは正反対のように思われ、できる限り試してみましたが、設計ガイドラインでこの正確なアドバイスを見つけることができませんでした。私はこのような小さな作品を見つけました:
Collection<T>
非常に一般的ReadOnlyConnection<T>
に使用されるメソッドとプロパティのサブクラスを返します。
以下にコード スニペットを示しますが、それ以上の理由はありません。
そうは言っても、これは実際に受け入れられているガイドラインですか(最初のブロック引用で説明されていた方法です)?それとも誤解されたのでしょうか?私が見つけることができる他のすべてのSOの質問にはIEnumerable<T>
、戻り値の型として好ましい回答があります。元の .NET ガイドラインが古くなっているのではないでしょうか?
それとも、それほど明確ではないのでしょうか?考慮すべきトレードオフはありますか? より具体的な型を返すのが良いのはいつですか? IList<T>
具体的なジェネリック型を返すこと、またはandのようなより具体的なインターフェイスのみを返すことが推奨されることはありReadOnlyCollection<T>
ますか?