我有一个泛型方法SampleMethod(param1,param2),我需要根据配置值调用该方法。例如:
SampleMethod<long>(param1, param2);
SampleMethod<Guid>(param1, param2);
在方法调用上,键入应更改配置值。我需要从app.config文件中获取配置文件的值。
public static Type RangeType
{
get
{
Type rangeType;
string rangeDataTypeString = ConfigurationManager.AppSettings["ShardRangeType"];
switch (rangeDataTypeString.ToUpper())
{
case "LONG":
rangeType = typeof (long);
break;
case "GUID":
rangeType = typeof (Guid);
break;
default:
rangeType = typeof (long);
break;
}
return rangeType;
}
}
当我尝试根据配置值调用此值并将此值传递给上述方法时:
Type rangeType = Configuration.RangeType;
SampleMethod<rangeType>(param1, param2);
上述语句中的rangeType无法识别为类型,有人可以建议如何完成此操作。提前谢谢!
答案 0 :(得分:1)
如果&#34; SampleMethod&#34;方法存在于您想要调用它的同一个类中:
this.GetType().GetGenericMethod("SampleMethod",rangeType).Invoke(null,param1, param2);
答案 1 :(得分:1)
编译泛型方法调用的类型参数。你不能把变量放进去。如果要将Type作为参数传递给方法,请将其作为参数添加到方法中。
如果你知道你有一组非常有限的类型参数,你可以创建一组条件调用(例如,带开关)。
否则,你可以使用反射来构造适当的泛型方法并调用它(如Reza的回答所示)。
在不知道您正在使用SampleMethod做什么的情况下,建议其他关于如何做的替代方案是不可能的。