繁体   English   中英

c#传递方法作为方法中的参数

[英]c# passing method as the argument in a method

我有一个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();
    }
}

对于没有任何参数的方法,此方法调用如下:

private void someMethod()
{
    // ...
}

doSomething(someMethod);

如果要使用参数调用方法,可以在其周围包装lambda函数:

private void someMethodWithArgument(int arg)
{
    // ...
}

doSomething( () => someMethodWithArgument(42) );

当然,如果要调用的方法总是使用相同类型的参数,则可以声明doSomething方法,以便它接受Action<T> / Action<T,T> / etc.参数。 如果希望被调用的方法返回值,请改用Func<T>系列中的委托。

您可以使用委托,这很像是指向函数的指针,您可以将委托传递给方法,该方法将使用参数调用它。

public delegate void Del(string message);
// Create a method for a delegate.
public static void DelegateMethod(string message)
{
    System.Console.WriteLine(message);
}
// Instantiate the delegate.
Del handler = DelegateMethod;

// Call the delegate.
handler("Hello World");

在你的情况下

private void doSomething(Del methodToBeCalled) 
{ 
    if(somthingistrue) 
    { 
        methodToBeCalled(someArgument) 
    } 
}

这可能吗?

代表

使用Delegates作为方法参数,您可以将委托指向您想要的任何方法,只要您坚持代理签名即可。

你也可以使用反射。 哪一个更好用(反射与委托)取决于你的其余代码。 如果您总是调用采用相同参数的方法,那么委托可能是最合适的。 如果需要调用采用不同参数的方法,则可能必须使用反射。 看看你的问题,看起来你的方法没有参数,所以我会使用前面提到的委托。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM