如何在不枚举的情况下将泛型字典转换为非泛型?
时间: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 */}