action 문자열 값을 기준으로 메소드를 호출하려면
-
06-07-2019 - |
문제
해당 메소드의 이름을 포함하는 문자열 값을 기반으로 메소드를 호출하는 방법이 있습니까?
해결책
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);
}
}
제휴하지 않습니다 StackOverflow