如何在不枚举的情况下将通用字典转换为非泛型?

时间:2008-09-29 08:07:28

标签: .net collections

我想将通用IDictionary的实例转换为非通用IDictionary。我可以在不创建IDictionary的新实例的情况下执行此操作吗?是否有任何框架支持此任务?

我尝试在实现非遗传IDictionary的类中包装通用IDictionary但是我发现我还必须以某种方式将通用ICollection转换为非通用IDollection,因此我选择Mark Gravell解决方案。

1 个答案:

答案 0 :(得分:20)

这完全取决于您正在使用的具体实现。

例如,Dictionary< TKey,TValue>实现通用IDictionary< TKey,TValue>和非泛型IDictionary - 所以如果你有一个字典< TKey,TValue>你可以毫无问题地使用它:

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

但是,这并不一定适用于所有IDictionary&lt; TKey,TValue&gt; imlpementations,因为IDictionary&lt; TKey,TValue&gt;并非如此。 :IDictionary。如果您深入了解某些通用代码,可以测试当前字典:

        IDictionary<int,string> typed  = ...
        IDictionary untyped = typed as IDictionary;
        if(untyped == null) {/* create by enumeration */}