我为什么不能做这样的事情:
var myDictionary = new Dictionary<string, Type>();
// Add data to dictionary
foreach(var kvPair in myDictionary)
{
var result = SomeMethod<kvPair.Value>(kvPair.Key); // Error
}
因此,我无法使用在Dictionary元素中拥有的Type并在type参数中使用它。是的,我可以将字典发送到SomeMethod(KeyValuePair)。但是我无法控制该函数的实现方式。
错误:找不到类型或名称空间名称“ kvPair”(您是否缺少using指令或程序集引用?
我感觉好像缺少了一些基础知识,我不确定它是什么。
我感觉好像缺少了一些基础知识,我不确定它是什么。
是的,您缺少通用参数是静态的,而不是动态的。在运行时无法发现它们。您的情况下的一种选择是在运行时使用反射来构建通用方法调用:
foreach(var kvPair in myDictionary)
{
// use reflection to create generic MethodInfo object
MethodInfo mi = typeof(this).GetMethod("SomeMethod");
MethodInfo mig = mi.MakeGenericMethod(kvPair.Value);
// call generic method
Object result = mig.Invoke(this, new object[] {kvPair.Key});
// cast to desired return type.
}
但是,在走这条路之前,我先退后一步,看看泛型是否是最好的设计,因为您知道泛型不是最新的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句