Вы можете добиться определенного объема строгой типизации - за счет повторения, используя Func
вариации:
public R InvokeMethod<T,R>(Func<T,R> method, T argument)
{
return method(argument);
}
public R InvokeMethod<T1,T2,R>(Func<T1,T2,R> method, T1 argument1, T2 argument2)
{
return method(argument1, argument2);
}
public R InvokeMethod<T1,T2,T3,R>(Func<T1,T2,T3,R> method, T1 argument1, T2 argument2, T3 argument3)
{
return method(argument1, argument2, argument3);
}
и т. Д.
Хотя это согласуется с вашиморигинал, нет никакой необходимости обрабатывать параметры вообще.Попробуйте написать свой InvokeMethod
следующим образом:
public R InvokeMethod<R>(Func<R> method)
{
return method();
}
, а затем вызвать его следующим образом:
internal bool RemoteLogin(string password)
{
return InvokeMethod(() => Server.RemoteLogin(password));
}
internal string GetSessionId()
{
return InvokeMethod( () => Server.GetSessionId());
}
Таким образом, вы оставите обработку параметров для лямбда-выражения, и вынужно написать InvokeMethod один раз.