Neu in .NET 8.0 [14]: Neue Wächtermethoden für Parameter

.NET 8.0 bietet neue Hilfsmethoden zum Auslösen von Fehlern bei falschen Parametern.

In Pocket speichern vorlesen Druckansicht 6 Kommentare lesen
Signal unter einer Lupe

(Bild: Dilok Klaisataporn/Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg
Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

In .NET 6.0 hatte Microsoft die Wächter-Methode ArgumentNullException.ThrowIfNull(Wert) eingeführt, um zu prüfen, ob ein Methodenparameter als Null-Wert übergeben wurde. In .NET 7.0 folgte ArgumentException.ThrowIfNullOrEmpty(Wert) für Zeichenketten.

In .NET 8.0 gibt es nun weitere Wächter für die Methodenparameter, die auch Wertebereiche bei Zahlen prüfen:

  • ArgumentOutOfRangeException.ThrowIfZero()
  • ArgumentOutOfRangeException.ThrowIfNegative()
  • ArgumentOutOfRangeException.ThrowIfNegativeOrZero()
  • ArgumentOutOfRangeException.ThrowIfGreaterThan()

Das funktioniert mit allen Zahlentypen, auch eigenen Zahlentypen auf Basis von INumberBase<T> und IComparable<T>.

namespace NET8_Console;
public class FCL_Exceptions
{
 
 public string Calc(decimal? betrag, decimal prozent, string einheit)
 {
  #region neue Wächtermethoden vor .NET 8.0
  // seit .NET 6.0:
  ArgumentNullException.ThrowIfNull(betrag); 
  // seit .NET 7.0:
  ArgumentException.ThrowIfNullOrEmpty(einheit); 
  #endregion
 
  #region neue Wächtermethoden in .NET 8.0
  ArgumentOutOfRangeException.ThrowIfZero(betrag.Value); 
  ArgumentOutOfRangeException.ThrowIfNegativeOrZero(betrag.Value); 
  ArgumentOutOfRangeException.ThrowIfNegative(prozent); 
  ArgumentOutOfRangeException.ThrowIfGreaterThan(prozent, 100); 
  #endregion
 
  var ergebnis = betrag * prozent / 100;
  return $"{prozent}% von {betrag} {einheit} sind {ergebnis} {einheit}";
 }
 
 public void Run()
 {
  // 50% von 42 Euro sind 21 Euro:
  Console.WriteLine(Calc(42, 50, "Euro")); 
 }
 
}

(rme)