我想将通用IDictionary的实例转换为非通用IDictionary。我可以在不创建IDictionary的新实例的情况下执行此操作吗?是否有任何框架支持此任务?
我尝试在实现非遗传IDictionary的类中包装通用IDictionary但是我发现我还必须以某种方式将通用ICollection转换为非通用IDollection,因此我选择Mark Gravell解决方案。
答案 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 */}