Console.ReadLine(); wird gelb unterstrichen:?
Hallo,
Bei mir wird Console.ReadLine gelb unterstrichen beim drübergehen erschent dieser Text:
"Reads the next line of characters from the standard input stream.
Rückgabewerte:
The next line of characters from the input stream, or
null
if no more lines are available.
Ausnahmen:
IOException
OutOfMemoryException
ArgumentOutOfRangeException
Mögliche Nullverweiszuweisung."
und wollte fragen wie ich das Problem beheben kann.
2 Antworten
Console.Readline kann null zurückliefern, dein Array akzeptiert aber nur string (nicht nullable)
Fix: string?[] games = new string?[spiel]
Das ? markiert zulässige null-Werte
Oder etwas kürzer:
var games = new string?[spiel]
Noch als Ergänzung: String ist ein Referenztyp, also auch ohne das ? nullable. Das sind seit neustem aber Hinweise, dass der Code eine Null-Reference-Exception erzeugen kann. Aber der Code funktioniert auch ohne ?
In dem Fall hier müsste es eigentlich immer funktionieren, weil kein Zugriff mehr auf das Array passiert. Bei Dingen wie games[0].Length knallts, weil null keine Eigenschaft Length hat ;)
Danke, simple Erklärung und da zu noch eine neue variable gelernt.
var kannst du fast immer einsetzten ;)
dann wird der datentyp automatisch bestimmt. Rechts initialisiert du ja ein String-Array, das weiß der Compiler dann.
Neben dem Vorschlag von biyixo5425 bieten sich immer try/catch Blöcke an, falls eine Exception auftreten könnte!
for (int i = 0; i < spiel; i++) {
try {
games[i] = Console.ReadLine();
} catch(Exception e) {
System.Console.WriteLine("Irgendwas ist schief gelaufen.\n" + e);
}
}
Alternativ bzw. zusätzlich, könntest du die Gültigkeit überprüfen und Nullwerte einfach überspringen. Aber Achtung, hier solltest du noch eine Abbruch-Bedingung für die While-Schleife einbauen.
String tempcheck = "";
for (int i = 0; i < spiel; i++) {
tempcheck = "";
while(String.IsNullOrEmpty(tempcheck)) {
tempcheck = Console.ReadLine();
}
try {
games[i] = tempcheck;
} catch(Exception e) {
System.Console.WriteLine("Irgendwas ist trotz größter Bemühungen schief gelaufen.\n" + e);
}
}
Als Nachtrag: Try/Catch sollte überall eingesetzt werden, wo richtige Exceptions auftreten können, aber trotzdem so sparsam wie möglich, da sie Performance Nachteile haben. Also so wenig Anweisungen wie möglich reinpacken!!.
Top Antwort.
Der Code wird funktionieren , solange kein Null zugewiesen wird.
Die IDE weißt ja nur darauf hin, dass eine Null Rückgabe möglich ist.
Das kann gut gehen. Sicher ist das aber nicht.