Console.ReadLine(); wird gelb unterstrichen:?

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 ?


PixelManuel  29.04.2022, 21:18

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.

1
biyixo5425  29.04.2022, 21:20
@PixelManuel

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

1
FatihBtw 
Fragesteller
 30.04.2022, 16:36

Danke, simple Erklärung und da zu noch eine neue variable gelernt.

1
biyixo5425  30.04.2022, 19:55
@FatihBtw

var kannst du fast immer einsetzten ;)

dann wird der datentyp automatisch bestimmt. Rechts initialisiert du ja ein String-Array, das weiß der Compiler dann.

0

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