おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

例外フィルターを用いて特定の例外をキャッチする!

はじめに

通常例外処理を書く際はtry-catchで処理を書いていきますが、C#6.0で導入された例外フィルターを用いるとcatchに対して条件を設けることが可能です。

サンプルコード

catchに対して条件を設けるにはwhenをcatch句の後に記載します。 以下は特定のエラーメッセージ文の時とそれ以外でcatchを分けているサンプルコードです。

//C#9.0以降のトップレベルステートメントを利用しています
using System;
try
{
    var str = string.Empty;
    if (!string.IsNullOrEmpty(str)) return;

    throw new Exception("str is null or empty");
}
catch (Exception e) when (e.Message == "str is null or empty")
{
    Console.WriteLine("strがnullか空です。");
}
catch (Exception e)
{
    Console.WriteLine("それ以外のエラーです。");
}
strがnullか空です。

ちゃんとwhenで指定したcatch句に入ってきているのが分かりますね!

ちなみにですが、whenの条件を以下みたいな内容にすると出力結果は"それ以外のエラーです。"となります。 ※一応whenの条件が効いていることを確認するため...。

when (e.Message == "str is null or empty222")

おわりに

try-catchはもちろんよく使うのですが、この例外フィルターについては勉強不足ながら知らなかったので今回備忘録として使ってみました! これからもチャンスがあれば使ってみようかな!