呼び出しコードがコレクションを反復するだけの場合、内部コレクションをIEnumerableではなくReadOnlyCollectionとして公開する理由はありますか?
class Bar
{
private ICollection<Foo> foos;
// Which one is to be preferred?
public IEnumerable<Foo> Foos { ... }
public ReadOnlyCollection<Foo> Foos { ... }
}
// Calling code:
foreach (var f in bar.Foos)
DoSomething(f);
ご覧のとおり、IEnumerableはReadOnlyCollectionのインターフェイスのサブセットであり、ユーザーがコレクションを変更することはできません。したがって、IEnumberableインターフェースで十分な場合は、それを使用します。それはそれについて推論する適切な方法ですか、それとも何か不足していますか?
ありがとう/ Erik
ReadOnlyCollection
偏執狂の場合は、返されたコレクションを引き続きにラップする必要がありますが、今は特定の実装に縛られていません。