我想将泛型IDictionary的实例转换为非泛型IDictionary。我可以在不创建IDictionary的新实例的情况下做到这一点吗?是否有任何框架支持此任务?
我尝试在实现非遗传 IDictionary 的类中包装泛型 IDictionary 但是我发现我还必须以某种方式将泛型 ICollection 转换为非泛型,所以我使用 Mark Gravell 解决方案。
我想将泛型IDictionary的实例转换为非泛型IDictionary。我可以在不创建IDictionary的新实例的情况下做到这一点吗?是否有任何框架支持此任务?
我尝试在实现非遗传 IDictionary 的类中包装泛型 IDictionary 但是我发现我还必须以某种方式将泛型 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 并非如此。如果您深入了解一些通用代码,您可以测试当前字典:
IDictionary<int,string> typed = ...
IDictionary untyped = typed as IDictionary;
if(untyped == null) {/* create by enumeration */}