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

Jak*_*urc 8 .net collections

我想将泛型IDictionary的实例转换为非泛型IDictionary.我可以在不创建IDictionary的新实例的情况下完成吗?是否有任何框架支持此任务?

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

Mar*_*ell 20

这一切都取决于您使用的具体实施.

例如,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;
Run Code Online (Sandbox Code Playgroud)

但是,这并不一定适用于所有IDictionary <TKey,TValue> imlpementations,因为IDictionary <TKey,TValue>:IDictionary不正确.如果您深入了解某些通用代码,可以测试当前字典:

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