1

キーを使用して IList を作成し、IDictionary から取得した値を使用して別の IList を作成する必要があります。どうすればいいのですか?ジェネリック (List<> と Dictionary<>) を避ける必要がありました。それらの内部の型は、コンパイル時に不明なユーザー定義型であるためです。

DataTable を処理して辞書を返すメソッドがあります。ディクショナリ キーのタイプは実行時に定義されます。

DataTable myDataTable = ....
Type dictionaryKeysType=Type.GetType("myType");
IDictionary myDictionary = ProcessDataTable (myDataTable, dictionaryKeysType);
IList keys= (IList)myDictionary.Keys;
IList values= (IList)myDictionary.Values;

どうすればいいのですか?ジェネリック (List<> と Dictionary<>) を避ける必要がありました。それらの内部の型は、コンパイル時に不明なユーザー定義型であるためです。したがって、メソッドは 'Dictionary<>' を返しますが、次のように宣言することはできません。

Dictionary<dictionaryKeysType, int> myDictionary = ProcessDataTable (myDataTable, dictionaryKeysType)

そのため、「IDictionary」として受け取る必要があります。「辞書」にキャストしようとすると問題が後で発生するため、「var」の使用は解決策ではありません

私のコードはコンパイルされますが、IList に変換するときに例外が発生します。たとえば、「myType」が「uint」の場合、次のようになります: (「KeyCollection[System.UInt32,System.Int32]」型のオブジェクトを「System.Collections.IList」型に変換できません)。

助けてください :(

4

1 に答える 1

1

私はお勧めします。

IList keys = myDictionary.Keys.ToList();
IList values = myDictionary.Values.ToList();

以下が含まれていることを確認してください。

using System.Linq;

ファイルの上部にあります。

これにより、.ToList() 拡張メソッドにアクセスできるようになります。

于 2013-10-13T14:30:19.530 に答える