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