如何将函数作为参数传递?

时间:2011-11-23 04:22:25

标签: c# exception-handling anonymous-methods

我想知道是否有办法将函数传递给另一个函数来处理它的try / catch。我正在处理一个没有任何异常处理的现有代码库。

4 个答案:

答案 0 :(得分:2)

注意:此答案解决问题的文本而不是标题,因为问题似乎与将函数作为参数传递无关。

要确切知道您要做什么有点困难,但您当然可以在自己的try…catch区块中调用公共方法。

public void ExistingMethod()
{
    // bad code
    // bad code
    throw new NullReferenceException("The previous developers are always the problem.");
}

…

public void MyMethod(ComponentFromOldCode component)
{
    try
    {
        component.ExistingMethod();
    }
    catch (NullReferenceException nre)
    {
        // do something
    }
    catch (Exception ex)
    {
        // do something
    }
}

您不能做的*是对现有的该函数调用添加错误处理。

您可以添加一些高级错误处理,这样至少可以让您有机会记录异常并向用户显示更优雅的失败体验。

*不合理

答案 1 :(得分:0)

答案 2 :(得分:0)

查看Actions。它们允许您传递匿名方法作为参数。

但是,我认为这不会帮助您解决问题。您可能希望重构代码库以进行适当的异常处理。

答案 3 :(得分:0)

您可以使用Lambda Expression

class Program
{
private static int Sum(int a, int b)
{
    return a + b;
}

private static int Multiply(int a, int b)
{
    return a * b;
}


private static int GetResult(Func<int, int, int> solver, int a, int b)
{
    try {
      return solver(a, b);
    } catch {
    }
    return 0; // your default return
}

static void Main(string[] args)
{
    var a = 2;
    var b = 3;

    var sum = GetResult(Sum, a, b);
    var multiply = GetResult(Multiply, a, b);
}

的更多信息

Lambda表达式(C#编程指南)

http://msdn.microsoft.com/en-us/library/bb397687.aspx

Func Delegate

http://msdn.microsoft.com/en-us/library/bb549151.aspx