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

时间:2020-03-06 14:51:52  来源:igfitidea点击:

我想将通用IDictionary的实例转换为非通用IDictionary的实例。我可以在不创建IDictionary新实例的情况下做到这一点吗?是否有任何框架支持该任务?

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

解决方案

这完全取决于我们所使用的具体实现。

例如,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 <TKey,TValue>并非正确:IDictionary。如果我们深generic一些通用代码的知识,则可以测试当前词典:

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