문제

해당 메소드의 이름을 포함하는 문자열 값을 기반으로 메소드를 호출하는 방법이 있습니까?

도움이 되었습니까?

해결책

Action<T> 주어진 방법을 가리킬 수있는 대의원 유형입니다. 문자열 변수에 저장된 런타임에만 알려진 메소드를 호출하려면 반사를 사용해야합니다.

class Program
{
    static void Main(string[] args)
    {
        string nameOfTheMethodToCall = "Test";
        typeof(Program).InvokeMember(
            nameOfTheMethodToCall, 
            BindingFlags.NonPublic | BindingFlags.InvokeMethod | BindingFlags.Static, 
            null, 
            null, 
            null);
    }

    static void Test()
    {
        Console.WriteLine("Hello from Test method");
    }
}

@andrew가 제안한대로 Delegate.createdElegate를 사용하여 MethodInfo에서 대의원 유형을 만들 수 있습니다.

class Program
{
    static void Main(string[] args)
    {
        string nameOfTheMethodToCall = "Test";
        var mi = typeof(Program).GetMethod(nameOfTheMethodToCall, BindingFlags.NonPublic | BindingFlags.InvokeMethod | BindingFlags.Static);
        var del = (Action)Delegate.CreateDelegate(typeof(Action), mi);
        del();
    }

    static void Test()
    {
        Console.WriteLine("Hello from Test method");
    }
}

다른 팁

나는 당신이 정말로 원한다고 생각하지 않습니다 Action<T> 정기적 인 방법입니다.

public void CallMethod<T>(T instance, string methodName) { 
    MethodInfo method = typeof(T).GetMethod(methodName);
    if (method != null) {
        method.Invoke(instance, null);
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top