C# verhindern dass null an eine Methode übergeben wird?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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).

Woher ich das weiß:Berufserfahrung – Software Entwickler / Devops

oSIEGUNwerg  29.09.2021, 22:23

hab ne frage zu deiner Antwort... Was genau ist ein enum?

0
BeamerBen  29.09.2021, 22:39
@oSIEGUNwerg

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.

0

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 */

VielFrager42 
Fragesteller
 26.07.2021, 17:08

Ok danke. Ich habe nur mehrere Parameter, deshalb hätte ich etwas eleganteres bevorzugt, aber dann frage ich die halt alle ab...

0
CSANecromancer  27.07.2021, 08:23
@VielFrager42
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.

1
Dultus, UserMod Light   27.07.2021, 13:57

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))
0
Dultus, UserMod Light   27.07.2021, 14:06
@regex9

Oh, tatsächlich. Kurios, ich hatte damit letztens noch Probleme und musste deshalb zu is null zurückgreifen...

0

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");  
Woher ich das weiß:Studium / Ausbildung

VielFrager42 
Fragesteller
 26.07.2021, 17:06

Ok schade. Aber danke...

0