通过C#中的方法返回并执行方法

时间:2016-05-05 22:15:38

标签: c# methods return action

我有 MainClass MethodFinder 类。我想通过 MethodFinder 获取要在Main中运行的方法名称并执行它。

我该怎么做?

我想要的是一个类,其方法返回 Method1 Method2 (基于某些条件),然后可以在 MainClass中运行' MainMethod

public MainClass
{
    public void Main()
    {
        var methodFinder = new MethodFinder();
        var method = methodFinder.Find();

        // Execute method
    }

    private void Method1(){}
    private void Method2(){}
}

2 个答案:

答案 0 :(得分:2)

只要方法具有相同的签名,您就可以在这种情况下使用Action类型。如果您的方法采用了参数,则可以使用Action<T>。如果它返回了值,您可以使用Func<TResult>

public Action Find(SomeType someParameter)
{
    if (someCondition)
    {
        return new Action(() => Method1());
    }
    else
    {
        return new Action(() => Method2());
    }
}

请注意,虽然此方法有点像您可能希望使用Polymorphism来实现目标,或者可能Dependency Injection

答案 1 :(得分:1)

您可以这样做,或使用Reflection更具活力。

public class MethodFinder
{
    public delegate void MethodSignature();

    //these can live whereever and even be passed in
    private static void Method1() => Debug.WriteLine("Method1 executed");
    private static void Method2() => Debug.WriteLine("Method2 executed");

    //maintain an array of possibilities or soemthing.
    //perhaps use reflection instead
    private MethodSignature[] methods = new MethodSignature[] { Method1, Method2 };

    public MethodSignature FindByName(string methodName) 
        => (from m in methods
            where m.Method.Name == methodName
            select m).FirstOrDefault();
}

用法:

var methodFinder = new MethodFinder();
var method = methodFinder.FindByName("Method2");
method(); //output: "Method2 executed"