ArgumentNullException.ThrowIfNull und die Throw-Helper
- Matt
Wie oft schreibe ich noch if (x is null) throw new ArgumentNullException(nameof(x));? Inzwischen kaum noch, seit ArgumentNullException.ThrowIfNull(x) das seit .NET 6 übernimmt. Den Parameternamen liefert CallerArgumentExpression automatisch mit, ganz ohne nameof.
Seit .NET 8 gibt es dieselbe Idee auch für Strings und Zahlen: ArgumentException.ThrowIfNullOrEmpty(name), ThrowIfNullOrWhiteSpace, dazu ArgumentOutOfRangeException.ThrowIfNegative(amount), ThrowIfZero, ThrowIfGreaterThan und ein paar mehr. Die Analyzer CA1511 und CA1512 melden sich inzwischen sogar von selbst, wenn irgendwo noch die alte Handschreib-Variante steht.
Der Haken: Jeder Helfer prüft genau die eine Bedingung, die sein Name verspricht. Wer mehrere Fälle gleichzeitig abfragen oder eine eigene Fehlermeldung setzen will, landet wieder beim klassischen if. Und in einer Bibliothek gegen netstandard2.0 gibt es die Helfer gar nicht erst.