1

我需要创建一个带有键的 IList 和另一个带有值的 IList,取自 IDictionary。我该怎么做?我不得不避免使用泛型(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)

所以我必须将它作为“字典”接收。使用“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 回答