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

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

有帮助吗?

解决方案

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

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

        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 */}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top