C#将IDictionary转换为两个列表

时间:2013-10-13 14:23:07

标签: c# collections ilist idictionary

我需要创建一个带有键的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)

所以我必须以“IDictionary”的形式收到它。使用'var'不是解决方案,因为稍后在尝试将其转换为'Dictionary'时会出现问题

我的代码编译但转换为IList时引发异常。例如,如果“myType”是“uint”,我得到:(无法将'KeyCollection [System.UInt32,System.Int32]类型的对象转换为'System.Collections.IList')。

请帮助:(

1 个答案:

答案 0 :(得分:1)

我建议;

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

请确保包括:

using System.Linq;

位于文件顶部。

这将允许您访问.ToList()扩展方法。