после настройки у меня есть несколько общих функций, и мне нужно выбрать тип и функцию, определенные двумя строками во время выполнения.
моя первая попытка выглядела так:
public static class FOOBAR
{
public delegate void MyDelegateType(int param);
public static void foo<T>(int param){...}
public static void bar<T>(int param){...}
public static void someMethod(string methodstr, string typestr)
{
MyDelegateType mydel;
Type mytype;
switch(typestr)
{
case "int": mytype = typeof(int);
break;
case "double": mytype = typeof(double);
break;
default: throw new InvalidTypeException(typestr);
}
switch(methodstr)
{
case "foo": mydel = foo<mytype>; //error
break;
case "bar": mydel = bar<mytype>; //error
break;
default: throw new InvalidTypeException(methodstr);
}
for(int i=0; i<1000; ++i)
mydel(i);
}
}
, так как это не сработало, я вложил эти переключатели (переключатель methodstr внутри переключателя typestr или наоборот), но это решение действительно некрасиво и не поддерживается.
Количество типов в значительной степени фиксировано, но количество функций, таких как foo
или bar
, будет увеличиваться на большие числа, поэтому я не хочу вложенных переключателей.
Так, как я могу заставить это работать без использования вложенных переключателей?