【发布时间】:2013-11-14 03:24:56
【问题描述】:
我需要一个接一个地执行很多语句,并且我需要当单个语句抛出异常时程序流继续执行下一个语句,例如:
double a = Double.Parse("2.5");
double b = Double.Parse("ADFBBG");
Geometry g = Geometry.Parse("M150,0L75,200 225,200z");
所有语句都必须执行,所以我需要一种级联的 try-catch 块:
double a, b;
Geometry g;
try
{
a = Double.Parse("2.5");
}
catch
{}
try
{
b = Double.Parse("ADFBBG");
}
catch
{}
try
{
g = Geometry.Parse("M150,0L75,200 225,200z");
}
catch
{}
显然,这不是编写我的程序的最优雅的方式。 有没有更好的方法(更优雅,不会显着降低性能)?
我尝试以这种方式使用Func<TResult> 委托:
我写了如下方法:
T Try<T>(Func<T> func)
{
try
{
return func();
}
catch
{
return default(T);
}
}
所以我可以这样使用它:
double x = Try(() => Double.Parse("77"));
Geometry g = Try(() => Geometry.Parse("M150,0L75,200 225,200z"));
其他解决方案?
【问题讨论】:
-
我希望您的问题不是真正基于将字符串解析为双精度数,因为您知道,您可以简单地使用 TryParse 而不是 Parse 绕过引发异常的问题。
-
@Steve 当然不是……
-
您需要一个更好的示例,否则您将得到的只是
TryParse的答案。 :-) -
您的 Try 函数是一个很好的解决方案。去吧。
-
+1 用于尝试功能。我想这是最好的解决方案,继续吧。
标签: c# exception try-catch func