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());
}
这纯粹是为了演示。我知道这行不通,但我希望它能把我的观点传达给你。
看起来你需要一个委托。
一个适用于你的场景的委托是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);
}