C# verhindern dass null an eine Methode übergeben wird?
Hallo, gibt es eine Möglichkeit in C# irgendwie zu verhindern bzw. auf den default Parameter zurückzugreifen dass null an eine Methode übergeben wird?
3 Antworten
Null ist einfach unschön, in Rust gibt es das z.B. gar nicht mehr und stattdessen nutzt man für Werte die quasi leer sein können einen Enum names Option der die werte None und Some(T) haben kann.
Zum Glück springen andere Sprachen auch etwas auf den Trend auf. In C# 8 gibts zumindest einen Operator um einen Wert zuzuweisen wenn eine Variable null ist ??=
Außerdem kann man wohl tatsächlich ausschalten das die meisten Referenz Typen in C# Nullable sind https://devblogs.microsoft.com/dotnet/embracing-nullable-reference-types/ ausprobiert habe ich das aber noch nicht (mache aktuell auch nichts mit C# deswegen habe ich das nicht wirklich verfolgt).
Im Prinzip eine Liste an fest definierten Werten. Ein populäres Beispiel wären Wochentage, über einen enum könntest du eine Liste von Montag bis Sonntag haben. Es ist lesbarer als Zahlen wie 0 bis 6 zu verwenden und effizienter und weniger Fehleranfällig für z.B. vertipper als Strings zu nutzen.
Gerade in der genannten Sprache, Rust, können Enums ziemlich viel, gibts aber an sich in vielen Sprachen.
Prüfe den Parameter doch einfach.
void DoSomething(SomeObject value)
{
if (value == null)
{
return;
}
// do something ...
}
Statt aus der Methode stillschweigend via return auszubrechen, könnte man auch eine ArgumentNullException werfen.
if (value == null)
{
throw new ArgumentNullException("value must be not null!");
}
Oder man setzt einen Fallbackwert:
if (value == null)
{
value = // some fallback value ...
}
Letzteres lässt sich gegebenenfalls auch mit dem null-coalescing-Operator abkürzen.
value ?? /* some fallback value */
In C# funktioniert das nicht.
if (value == null)
Das wird dir einen Fehler auswerfen, wenn value wirklich null ist - nutzen muss man dann meines Erachtens nach;
if (!(value is null))
Ok danke. Ich habe nur mehrere Parameter, deshalb hätte ich etwas eleganteres bevorzugt, aber dann frage ich die halt alle ab...
Ich habe nur mehrere Parameter,
Auch bei drei oder vier Parametern sollte das noch kein Drama sein. Falls es mehr Parameter sind, wäre ggf. der Einsatz von Strukturen und Objekten, in denen diese Parameter zusammen gefasst sind, sinnvoll. Dann könnte auch die null-Prüpfung innerhalb dieser Strukturen bzw. Objekte stattfinden.
Ich wüsste nicht, dass sowas geht.
Auch eine kurze Recherche hat gesagt, dass es da nichts schönes gibt.
Mein Vorschlag:
Überprüfe explizit in der aufgerufenen Methode, ob die Parameter Null sind.
Dann kannst du entsprechend darauf reagieren oder ganz einfach ein return machen.
Also vielleicht sowas:
if (arg == null)
throw new ArgumentNullException("arg");
hab ne frage zu deiner Antwort... Was genau ist ein enum?