我在stackoverflow上看到了类似问题的一些解决方案,但看起来每个问题都是唯一的。
我正在尝试实现全局try / catch而不是在每个方法上编写try / catch但是我遇到了这个错误。它适用于一个参数,而不适用于采用多个参数的方法。
class Program
{
static void Main(string[] args)
{
int i = 5;
int j = 10;
string s1 = GlobalTryCatch(x => square(i), i);
string s2 = GlobalTryCatch(x => Sum(i,j), i, j); // error here..
Console.Read();
}
private static string square(int i)
{
Console.WriteLine(i * i);
return "1";
}
private static string Sum(int i, int j)
{
Console.WriteLine(i+j);
return "1";
}
private static string GlobalTryCatch<T1>(Func<T1, string> action, T1 i)
{
try
{
action.Invoke(i);
return "success";
}
catch (Exception e)
{
return "failure";
}
}
private static string GlobalTryCatch<T1, T2>(Func<T1, T2, string> action, T1 i, T2 j)
{
try
{
action.Invoke(i, j);
return "success";
}
catch (Exception e)
{
return "failure";
}
}
}
答案 0 :(得分:3)
string s2 = GlobalTryCatch((x, y) => Sum(i, j), i, j);
编译器无法将原始方法与string GlobalTryCatch<T1>(Func<T1, string> action, T1 i)
匹配,因为lambda表达式只有一个参数,但方法签名需要两个参数。修复是使用(x, y)
,这表示lambda有两个参数。
作为一种快捷方式,您只需提供&#34;方法组&#34;,这将产生以下结果:
string s2 = GlobalTryCatch(Sum, i, j);
答案 1 :(得分:1)
您可以像这样提供双参数Func
string s2 = GlobalTryCatch(Sum, i, j); // error here..
无需添加lambda表达式。
答案 2 :(得分:0)
您可能需要考虑处理Application.UnhandledException事件并在那里处理您的例外情况。
您的方法签名有所不同。这就是为什么你不能使用GlobalTryCatch的单一实现。