9

ジェネリックIDictionaryのインスタンスを非ジェネリックIDictionaryに変換したい。IDictionaryの新しいインスタンスを作成せずにそれを行うことはできますか? このタスクをサポートするフレームワークはありますか?

非ジェネティック IDictionary を実装するクラスでジェネリック IDictionary をラップしようとしましたが、何らかの形でジェネリック ICollection を非ジェネリック ICollection に変換する必要があることを発見したので、Mark Gravell ソリューションを使用します。

4

1 に答える 1

20

それはすべて、使用している具体的な実装に依存します。

たとえば、Dictionary<TKey,TValue> は、ジェネリック IDictionary<TKey,TValue> と非ジェネリック IDictionary の両方を実装しているため、Dictionary<TKey,TValue> がある場合は、どちらでも問題なく使用できます。

        Dictionary<int, string> lookup = new Dictionary<int,string>();
        IDictionary<int,string> typed = lookup;
        IDictionary untyped = lookup;

ただし、IDictionary<TKey,TValue> が IDictionary であるとは限らないため、これは必ずしもすべての IDictionary<TKey,TValue> 実装に適用されるわけではありません。一般的なコードの奥深くにいる場合は、現在の辞書をテストできます。

        IDictionary<int,string> typed  = ...
        IDictionary untyped = typed as IDictionary;
        if(untyped == null) {/* create by enumeration */}
于 2008-09-29T08:16:29.823 に答える