C# CS8602 mit Console.ReadLine();?

1 Antwort

Von Experte whgoffline bestätigt

Grundsätzlich kann ReadLine( ) einen null Wert zurückliefen. Somit führt ein Zugriff auf diesen Rückgabewert zu einer Null-Reference Exception. Deswegen warnt dich Visual Studio an dieser Stelle.

Prüfe bevor du das ToLower( ) aufrufst zunächst auf != null.

userInputString = Console.ReadLine();
if(userInputString != null)
{
  //... dann das ToLower() und andere Zugriffe auf userInputString
  userInputString.ToLower();
}

LG Knom

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾

Üblicherweise verwendet man ein null-Resultat als Grund für einen Schleifenabbruch. Hier könnte man einen null-Wert als "exit" oder als Leereingabe interpretieren. C#-üblich wäre

userInputString = Console.ReadLine()?.ToLower() ?? "exit";

aber anfängergeeigneter

string? userInputStringNullable = Console.ReadLine().ToLower();
if (userInputStringNullable is null)
{
    userInputString = "exit";
}
else
{
    userInputString = userInputStringNullable.ToLower();
}

Was ein wenig Nachdenken erfordert: Natürlich kann der Standard-Input der Konsole niemals null zurückgeben - entweder tippt der Benutzer auf die Zeilenschaltung bzw. Enter-Taste oder das komplette Programm wird abgebrochen. Aber man kann den Eingabe-"Stream" der Konsole umbiegen, etwa auf eine Datei. Und dann kann es sehr wohl vorkommen, dass die Datei zuende ist, wenn das Programm versucht, die nächste Zeile zu lesen. (In der Kommandozeile des Systems:

...> tool.exe < eingabedatei.txt

)

1
@PWolff

P. S.: @kl4vd14, würdest du bitte nächstes Mal den Quelltext als Quelltext posten und nicht als Screenshot? (Dafür gibt es in der Formatierungsleiste über den Eingabefeldern von gutefrage.net das Symbol </>)

1
@PWolff
aber anfängergeeigneter
string? userInputStringNullable = Console.ReadLine().ToLower();

Hier fehlt aber auch ein Fragezeichen, weil null.ToLower() nicht so gut funktioniert ;)

2
@MagicalGrill

Danke für die Korrektur.

Gemeint war

string? userInputStringNullable = Console.ReadLine();
2
@PWolff

sicher, es tut mir leid! und vielen lieben Dank :)

0