我认为将IDictionary
对象强制转换为IDictionary
相当简单,但是
var val = (IDictionary<TKey, IEnumerable<TValue>>)Value;
var val = Value as IDictionary<TKey, IEnumerable<TValue>>;
我认为将IDictionary
对象强制转换为IDictionary
相当简单
绝对不行.它不会是类型安全的。这里有一个为什么不这样做的例子:
// This is fine...
IDictionary<string, IList<int>> dictionary = new Dictionary<string, IList<int>>();
// Suppose this were valid...
IDictionary<string, IEnumerable<int>> badDictionary = dictionary;
// LinkedList<T> doesn't implement IList<T>
badDictionary["foo"] = new LinkedList<int>();
// What should happen now?
IList<int> bang = dictionary["foo"];
正如您所看到的,这将导致问题-当我们期望所有值都实现ILIST
时,我们将试图获得LinkedList
。泛型的重点是类型安全-那么您希望哪一行会失败呢?在我看来,第一行、第三行和第四行显然是有效的--所以第二行是唯一一个无法编译的行,它确实...
编辑:只是为了澄清-很容易用现有键/值对的副本创建一个新字典,例如使用link:
var copy = original.ToDictionary<TKey, IEnumerable<TValue>>(pair => pair.Key,
pair => pair.Value);
你只需要知道你现在有两个独立的字典。