вызвать проверенный во время компиляции метод с динамическими аргументами в c # - PullRequest
0 голосов
/ 13 января 2011

Хорошо, это то, что я хочу сделать:

public static void CallStaticMethod(Type myType, String methodName, Object[] parameters)
{
     MethodInfo m = myType.GetMethod(methodName); // make this compile-time safe
     m.Invoke(null, parameters);                  // methodName method is supposed to be static
}

Теперь myType.GetMethod (methodName) может завершиться ошибкой во время выполнения, если «methodName» не существует.
Можно ли как-нибудь обезопасить время компиляции?
(предположим, что параметры верны)

Я бы хотел вызвать метод как-то так:

CallStaticMethod(()=>MyType.MyMethod(), Object[] parameters)

обратите внимание, что это не работает, так как вам нужно указать аргументы внутри лямбда-выражения.

Другими словами, мне нужен безопасный дескриптор времени компиляции для метода. Я могу получить один тип, используя typeof (), но возможно ли это для метода?

1 Ответ

3 голосов
/ 13 января 2011

Используйте указатели на функции, то есть делегаты.Простой пример:

delegate int StringIntParse(string value);

    public static int Main(string[] args)
    {
        StringIntParse p = int.Parse;
        Console.WriteLine(p("34"));
        Console.WriteLine(p.DynamicInvoke(new object[] { "43" }));
        return 0;
    }

Вы можете использовать DynamicInvoke для любого делегата, например:

static object InvokeAnyDelegate(Delegate d, params object[] args)
{
    return d.DynamicInvoke(args);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...