.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;

ただし、結果がエラーであった場合はその場でエラーが投げられるので、エラーが出ることが想定される場合はおすすめしません。

エラーの確認をさぼってサーバーを止めないようにしましょう。


インプラス株式会社

このブログの人気の投稿

技術メモ「503 Service Unavailable」

googleドライブの同期は、フォルダ選択ができました。

グーグルグループのメーリングリストの返信先が個人になってしまう