什麼時候

when 是在 C#6 中新增的關鍵字,用於異常過濾。

在引入 when 關鍵字之前,你可以為每種型別的異常設定一個 catch 子句; 通過新增關鍵字,現在可以實現更細粒度的控制。

when 表示式附加到 catch 分支,並且只有當 when 條件為 true 時,才會執行 catch 子句。有幾個 catch 子句可能具有相同的異常類型別和不同的 when 條件。

private void CatchException(Action action)
{
    try
    {
        action.Invoke();
    }
    
    // exception filter
    catch (Exception ex) when (ex.Message.Contains("when"))
    {
        Console.WriteLine("Caught an exception with when");
    }

    catch (Exception ex)
    {
        Console.WriteLine("Caught an exception without when");
    }
}

private void Method1() { throw new Exception("message for exception with when"); }
private void Method2() { throw new Exception("message for general exception"); }

CatchException(Method1);
CatchException(Method2);