c# -如何在函数中传递和运行方法

本文关键字:运行 方法 函数 | 更新日期: 2023-09-27 18:17:03

我正试图为Selenium测试编写一个包装器,如果测试失败,则重新运行测试,我已经获得了工作良好的机制。但是我需要找出一种传递函数/方法或(最好)函数内部的多个方法的方法。下面是我想要实现的一个例子:

在包装器类中:

public class TestRunner{
    public void RunTest(function FuncToRun){
        FuncToRun();        
    }
}

在测试中:

public class Tests{
    public void Test(){
        ...Run test methods...
    }
TestRunner.RunTest(Test());
}

这纯粹是为了演示。我知道这行不通,但我希望它能把我的观点传达给你。

c# -如何在函数中传递和运行方法

看起来你需要一个委托。

一个适用于你的场景的委托是Action委托,它可以用来表示一个单一的无参数方法。

public class TestRunner
{
    public void RunTests(params Action[] tests)
    {
        foreach (var test in tests)
        {
            test.Invoke();
        }
    }
}

注意params关键字的使用,这将允许您向RunTests方法提供任意数量的测试。下面是使用隐式方法组转换的示例:

public class Tests
{
    public void TestOne() {
    }
    public void TestTwo() {
    }
}
...
var runner = new TestRunner();
var tests = new Tests();
runner.RunTests(tests.TestOne, tests.TestTwo);

您可以使用Action参数来完成此操作

public class TestRunner{
    public void RunTest(Action FuncToRun){
        FuncToRun();        
    }
}
public class Tests{
    public void Test(){
        ...Run test methods...
    }
    TestRunner.RunTest(() => Test());
}   

您应该这样做。但是需要更多的上下文,如输入和您期望的返回值。

   Func<string, int> myMethodName

这是一个用法的例子:

   public bool RunThisMethod(Func<string, int> myMethod)
    {
        //... do stuff
        int i = myMethod("My String");
        //... do more stuff
        return true;
    }

使用委托。只需声明要传递的方法的委托,然后调用该方法并将其分配给该方法。

http://msdn.microsoft.com/en-IN/library/ms173171.aspx

你可以使用委托,甚至Action或Func对象。

public class TestRunner{
    public void RunTest(Action funcAction){
        funcAction();        
    }
}
public class Tests{
    public void Test(){}
    TestRunner.RunTest(Test);
}