可能性の重複:
Collection<T> versus List<T> what should you use on your interfaces?内部リスト<T>をIEnumerable <T>またはICollection <T>として返すことができますか?
この方法-返される変数myVar
考えてみてはList<T>
ですが、方法MyMethod()
の戻り値の型がIEnumerable<T>
です:
public IEnumerable<T> MyMethod(string stuff)
{
var myVar = new List<T>();
//do stuff
return myVar;
}
本質的に、私が知りたいのは、もしreturni異なるタイプのmyVar
はOKです。
具体的には、私の状況に関して、「do stuff」はDataRow
を通過し、その中の項目にオブジェクトのリストを割り当てます(DataRow
)。私はまた、他の場所でICollection
とIList
の戻り値の型を持つ同様の状況を持っています。
私がIEnumerable
またはICollection
のいずれかを返す理由は、私が必要以上に戻ってこないようにするためです。しかし同時に、これにより、呼び出し側は返された値をList
に変換する必要がある場合にその値を変換することができます。
しかし、私のreturnステートメントは、メソッドの戻り値の型ではなく、List
を返しています。これは通常の練習ですか?これに何か問題はありますか? (だまされやすい人のコメントに応答して)
明確化:
だけ明確にする、体内で私のreturn文がList<T>
が、メソッドを返すこと大丈夫であれば、私は好奇心だことはありますヘッダーの戻りタイプがIEnumerable
、またはおそらくICollection
、Collection
などです。何かが異なるボディリターンステートメントとは異なります。
呼び出し元は、IEnumerableからListに変換しないでください。インタフェースを返す理由は、根本的なリスト、オーバーバブルコレクション、単純な配列、または利回りリターンによるリストさえあれば問題ではないからです。 – aqwert
2つの提案されたdupesは、この質問よりもそれぞれのdupesに近いです、と私は思っていますが、それらはすべて密接に関連しています。 –
@ChrisCharabaruk私は、この質問は重複していないことに同意し、私はそれがユニークになると信じていることをうまく伝えるためにそれを改作しました。私はまた、質問を再開することに投票しました。 – DavidRR