目的を達成するために両方の方法でコードを書くことができますが、どちらの方法に従うのがベスト プラクティスでしょうか?
Collection<MyClass> obj = new Collection<MyClass>();
また
IEnumerable<MyClass> obj = new Collection<MyClass>();
この場合、IEnumerable<MyClass> obj = new Collection<MyClass>()
アイテムを追加できない空のコレクションがあるため、まったく意味がありIEnumerable
ません(許可されていないため)。それはどのように役立ちますか?
それ以外に、メソッドの外部のコードに公開されないローカル変数について話している場合、重要なのは利便性と明確さだけです。最初の形式と同等のものを使用して、これらの両方を最大限に活用できます。
var obj = new Collection<MyClass>();
オブジェクトが外部コードに公開されている場合(たとえば、プロパティを介して、またはメソッドによって返される場合)、クラスのパブリックインターフェイスを考慮して最も意味のあるタイプを選択する必要があります。これは、経験則として、可能な限り特殊性の低いタイプを使用し、常にインターフェイスを優先する必要があることを意味します。
したがって、公開obj
するIEnumerable
場合は、コレクションがコードのユーザーによって変更されることを意図していない場合に使用する必要があります。それ以外の場合は、ICollection
可能であれば使用する必要があります。それでも十分でない場合はIList
。
個人的にはそれはあなたが達成したい特異性のレベルに依存すると思います。
を暗示することを心に留めておいてCollection<T>
くださいIList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
。
Jonがすでに指摘したように、追加できない空のコレクションを作成しているため、指定した例は意味がありませんが、別の例を指定すると、特異性のレベルが関係します。
コレクションには特定のメンバーのセットがあり、それらのメンバーが必要な場合はそれを使用します。コレクション内のデータについてあまり具体的にしたくない場合は、Collectioinによって実装されている任意のインターフェイスにキャストできます。問題は、を作成しているのになぜそうしたいのかということですCollection<T>
。
それは完全に要件に依存します。DAL でデリングするか、データベース オブジェクトを返す場合は、IEnumerable を使用することをお勧めします。
コレクションとして宣言すると、追加する機能が増えます。 そこでより多くのアイデアを得ることができます。