.NET6〜8で引数チェック→例外スローが1行で書けるようになった

.NET6〜8で引数チェック→例外スローが1行で書けるようになった話です。

引数チェック→例外スローが1行で書けるようになった

これまでは、引数が null かどうかをチェックして例外をスローするには、以下のように書いていました。

if (obj is null)
{
    throw new ArgumentNullException(nameof(obj));
}

これが .NET 6 で以下のように書けるようになりました。

ArgumentNullException.ThrowIfNull(obj);

そのほか追加されたものたち

その他にも、.NET8にかけて以下のメソッドが追加されました。

public sealed class Example : IDisposable
{
    private bool _disposed;

    public void Foo(object? obj, string? str, int value, IEnumerable<int> list)
    {
        // null チェック
        ArgumentNullException.ThrowIfNull(obj);

        // 文字列の null または 空文字 チェック
        ArgumentException.ThrowIfNullOrEmpty(str);

        // 文字列の null, 空文字, または 空白 (Whitespace) チェック
        ArgumentException.ThrowIfNullOrWhiteSpace(str);
        
        // 0より小さい(負数)場合にスロー
        ArgumentOutOfRangeException.ThrowIfNegative(value);

        // 0以下の場合にスロー
        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value);

        // 指定した値より大きい場合にスロー
        ArgumentOutOfRangeException.ThrowIfGreaterThan(value, 100);

        // 指定した値より小さい場合にスロー
        ArgumentOutOfRangeException.ThrowIfLessThan(value, 0);

        // 指定した値以上の場合にスロー
        ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(value, 100);

        // 指定した値以下の場合にスロー
        ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(value, 0);

        // インスタンスが破棄済みかどうかをチェックしてスロー
        ObjectDisposedException.ThrowIf(_disposed, this);
    }

    public void Dispose() => _disposed = true;
}