使用Var方法输入的方法?

Rez*_*eni 1 c#

在C#中:

是否可以定义一个输入参数是任何方法的方法

让我更好地描述一下:

我想要一个带签名的方法

bool IsDoit(var method)
{
    try
    {
        method(...);
        return true;
    }
    catch{return false;}
}
Run Code Online (Sandbox Code Playgroud)

这得到一个方法并返回一个抛出异常的布尔值!

通用代表?通用行动?通用功能?

你有什么想法或者不可能吗?

Jon*_*eet 7

这里的"......"会怎么样?听起来你想要一些描述的委托 - 并且委托签名应该与你想要调用的方法匹配.例如:

static bool IsDoit(Action method)
{
    try
    {
        method();
        return true;
    }
    catch
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许任何无参数void方法的方法组转换:

if (IsDoIt(SomeMethodWithNoParameters))
{
}
Run Code Online (Sandbox Code Playgroud)

如果调用者想要调用一个带有其他参数的方法,他们可以使用lambda表达式将其包装在Action:

if (IsDoIt(() => MethodWithParameters("first", "second"))
{
}
Run Code Online (Sandbox Code Playgroud)

我个人一点也不一切有关这种设计在首位的智慧肯定,你要知道-捕获异常,并没有任何类型的日志记录吞咽他们似乎是一个非常糟糕的主意给我.