如果“值”是传入的通用字典,其类型未知/无关紧要,我如何获取其条目并将它们放入类型的目标字典中IDictionary<object, object>
?
if(type == typeof(IDictionary<,>))
{
// this doesn't compile
// value is passed into the method as object and must be cast
IDictionary<,> sourceDictionary = (IDictionary<,>)value;
IDictionary<object,object> targetDictionary = new Dictionary<object,object>();
// this doesn't compile
foreach (KeyValuePair<,> sourcePair in sourceDictionary)
{
targetDictionary.Insert(sourcePair.Key, sourcePair.Value);
}
return targetDictionary;
}
EDIT:
感谢到目前为止的回复。
这里的问题是 Copy 的参数仅被称为“object”类型。例如:
public void CopyCaller(object obj)
{
if(obj.GetType() == typeof(IDictionary<,>)
Copy(dictObj); // this doesn't compile
}
让你的方法也变得通用,然后你就可以做你正在做的事情了。您不必更改使用模式,因为编译器将能够从输入类型推断泛型类型。
public IDictionary<object, object> Copy(IDictionary<TKey, TValue> source)
{
IDictionary<object,object> targetDictionary = new Dictionary<object,object>();
foreach (KeyValuePair<TKey, TValue> sourcePair in sourceDictionary)
{
targetDictionary.Insert(sourcePair.Key, sourcePair.Value);
}
return targetDictionary;
}
如果你真的不需要将其转换为IDictionary<TKey, TValue>
to IDictionary<object, object>
那么你可以使用复制构造函数Dictionary<TKey, TValue>
它接受另一个字典作为输入并复制所有值 - 就像您现在所做的那样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)