.NET もう1つのエラーの扱い方
.NETでは、try/catchブロックで囲むことでエラーを処理できます。
try {
int item = GetItem();
Console.WriteLine($"Item: {item}");
} catch (Exception ex) {
Console.WriteLine($"Caught an exception: {ex.Message}");
}
.NEXTというライブラリのResult型を使うと、try/catchブロックを使わずにエラーを処理できます。
using DotNext;
Result<int> result = GetItem2();
if (result.TryGet(out int item))
{
Console.WriteLine($"Item: {item}");
}
else
{
Console.WriteLine($"Caught an exception: {result.Error.Message}");
}
Result<int> GetItem2()
{
// 条件を満たしていないならエラー
if (...)
return Result.FromException<int>(new Exception("条件を満たしていません。"));
return 0;
};
エラーが起こる可能性があることがわかっていれば、Resultを返すようにすると型でその可能性を判別できて、値を安全に取り扱うことができます。
値を直接取り出すこともできます。
Result<int> result = GetItem2(); int value1 = (int)result; int value2 = result.Value;
ただし、結果がエラーであった場合はその場でエラーが投げられるので、エラーが出ることが想定される場合はおすすめしません。
エラーの確認をさぼってサーバーを止めないようにしましょう。
