4

.NET v2

リストに非常に便利な(4 me)メソッドAsReadOnly()がある場合、LinkedListにはそのようなメソッドがありません。

内部LinkedListを「迅速に」インターフェースして、外部コードからのみ読み取る方法はありますか?

4

4 に答える 4

9

を返さないのはなぜIEnumerable<T>ですか?ユーザーがリストを変更せずにリストを列挙できるようにしたい場合*、IEnumerable は当然の選択です。

LinkedList インターフェイスの読み取り専用インターフェイスが必要な場合は、LinkedList をラップし、ラップされたリストに読み取り専用メソッドを転送して、変更を拒否できます。

*) IEnumerable でも ReadOnlyCollection でも、参照型のコレクションの場合、呼び出し元がオブジェクトの状態を変更できないことに注意してください。オブジェクトも読み取り専用にする必要がある場合は、これを型の一部として実装する必要があります。

于 2009-11-19T11:29:25.930 に答える
3

ReadOnlyCollection<T>IList<T>コンストラクターへの as 引数を取ります。LinkedList<T>はこのインターフェイスを実装していません。as 引数を取り、このインターフェイスを実装List<T>するコンストラクター オーバーロードがあります。したがって、次のように動作するはずです。IEnumerable<T>LinkedList<T>

LinkedList<int> linked = new LinkedList<int>();
// populate the list

ReadOnlyCollection<int> readOnly = new ReadOnlyCollection<int>(
    new List<int>(linked));

のインスタンスを使用して、アイテムをコンストラクターList<T>に運びます。ReadOnlyCollection<T>

于 2009-11-19T11:34:36.030 に答える
0

LinkedList<T>要するに、実装されていませんIList。すばやく実行する方法はありません。LinkedList を List にキャストすると、必要な機能が失われる可能性があります。

LinkedList<T>サブクラス化するものは何も提供しないため、独自に作成する必要があります。次のリクエストは「その方法を教えてくれませんか」だと思います

于 2009-11-19T11:30:06.600 に答える