6

IDictionary<TKey, TValue>は から継承していますIEnumerable<KeyValuePair<TKey, TValue>>IDictionary、何らかの理由で から継承していませんIEnumerable<DictionaryEntry>。なぜだろう?.OfType<DictionaryEntry>()に対してクエリを実行する必要があるたびに、これを醜く書くのは嫌いIDictionaryです。

4

2 に答える 2

4

IDictionary古い(ジェネリック以前の)インターフェースであるためです。これを変更すると、既存のコードが壊れます。それは遺産です。

根本的な問題は、なぜ (まだ) IDictionary ベースのクラスを使用していて、アップグレードできないのですか?

于 2010-06-18T11:00:57.257 に答える
3

その変更を行うと、インターフェースの既存の実装がすべて壊れます (インターフェースが持つべきメソッドの一部が突然失われるため)。

さらに、IDictionary は、ジェネリックより前のレガシー互換性のためにのみ存在します。どうしても必要な場合を除き、新しいコードでは使用しないでください。実際にオブジェクト型を扱っている場合は、代わりに IDictionary<object, object> を使用できます。

于 2010-06-18T11:00:58.657 に答える