我想知道是否有办法将函数传递给另一个函数来处理它的try / catch。我正在处理一个没有任何异常处理的现有代码库。
答案 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