多くのステートメントを次々に実行する必要があり、単一のステートメントが例外をスローしたときに、プログラムのフローが次のステートメントの実行を継続する必要があります。次に例を示します。
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"));
他の解決策?