从app.config

时间:2016-05-30 06:07:58

标签: c# generics config

我有一个泛型方法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无法识别为类型,有人可以建议如何完成此操作。提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果&#34; SampleMethod&#34;方法存在于您想要调用它的同一个类中:

this.GetType().GetGenericMethod("SampleMethod",rangeType).Invoke(null,param1, param2);

答案 1 :(得分:1)

编译泛型方法调用的类型参数。你不能把变量放进去。如果要将Type作为参数传递给方法,请将其作为参数添加到方法中。

如果你知道你有一组非常有限的类型参数,你可以创建一组条件调用(例如,带开关)。

否则,你可以使用反射来构造适当的泛型方法并调用它(如Reza的回答所示)。

在不知道您正在使用SampleMethod做什么的情况下,建议其他关于如何做的替代方案是不可能的。