我有一个recuring方法,它在我的代码中多次显示它基本上检查以确保与odbc的连接是正确的然后连接但每次调用此方法时它调用另一个方法和main方法的每个实例这一个是不同的,因为每个方法大约有8行代码,在代码中有8次是不理想的.
所以基本上我想有一个方法,我可以调用传递新方法的名称作为争论.
所以基本上像:
private void doSomething(methodToBeCalled)
{
if(somthingistrue)
{
methodToBeCalled(someArgument)
}
}
这可能吗?
提前致谢
如前所述,您可以使用代理:
// as in the original post:
private void doSomething(Action methodToBeCalled)
{
if (somethingIsTrue)
{
methodToBeCalled();
}
}
Run Code Online (Sandbox Code Playgroud)
对于没有任何参数的方法,此方法调用如下:
private void someMethod()
{
// ...
}
doSomething(someMethod);
Run Code Online (Sandbox Code Playgroud)
如果要使用参数调用方法,可以在其周围包装lambda函数:
private void someMethodWithArgument(int arg)
{
// ...
}
doSomething( () => someMethodWithArgument(42) );
Run Code Online (Sandbox Code Playgroud)
当然,如果要调用的方法总是使用相同类型的参数,则可以声明doSomething方法,以便它接受Action<T>/ Action<T,T>/ etc.参数.如果希望被调用的方法返回值,请使用来自Func<T>系列的委托.