9

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

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

4

1 回答 1

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;

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

        IDictionary<int,string> typed  = ...
        IDictionary untyped = typed as IDictionary;
        if(untyped == null) {/* create by enumeration */}
于 2008-09-29T08:16:29.823 回答