2016-07-14 6 views
4

Ich bemerkte, dass ReSharper schlägt mir Console.ReadLine() für null zu überprüfen. Ich verstehe nicht warum, denn soweit ich weiß, gibt die Methode "" zurück, auch wenn Sie enter in einer Konsole drücken und kein Symbol eingeben.ReSharper sagt, dass Console.ReadLine() gibt null Wert zurück

I verwenden VS 2015 mit 3. Aktualisierung, C# 6, .NET 4.6.1, ReSharper 10.

enter image description here

+0

In C# 6 könnte man schreiben: 'int? length = Console.ReadLine() ?. Length; '. Dann wäre Resharper glücklich und du könntest mit dem Fall umgehen, dass '! Length.HasValue'. –

+1

@TimSchmelter Das stimmt. Aber er fragte * warum * ReSharper denkt, dass 'Console.ReadLine()' null sein könnte. –

+1

@diiN_: Ja, und Sie haben das perfekt beantwortet. Deshalb ist es nur ein Kommentar;) –

Antwort

4

The documentation gibt an, dass null zurückführende Teil des Auftrags für diese Methode ist:

Die nächste Zeile von Zeichen aus dem Eingabestrom oder null, wenn keine weiteren Zeilen verfügbar sind.

Und auf give geht ein Beispiel:

Wenn die Strg + Z-Zeichen gedrückt wird, wenn die Methode Eingabe von der Konsole zu lesen ist, kehrt die Methode null.

Als weiteres Beispiel können Sie die TextReader verwendet ändern für Console.InConsole.SetIn verwenden. Ihr TextReader könnte null zurückgeben, wenn ReadLine aufgerufen wird.

0

Nach MSDN, wenn Sie der Standardeingabe umgeleitet werden aus einer Datei zu sein, wird Console.ReadLine()null zurück, wenn es keine Zeilen verbleiben aus der Datei gelesen werden.

5

Console.ReadLine() kann null sein, wenn Sie Strg + Eingabe Z.

MSDN documentation:

Wenn die Strg + Z-Zeichen gedrückt wird, wenn die Methode Eingabe von der Konsole zu lesen ist, wird die Methode null zurück. Dies ermöglicht dem Benutzer, weitere Tastatureingaben zu verhindern, wenn die ReadLine-Methode in einer Schleife aufgerufen wird.

+0

Erstaunliches Beispiel, denn kann sehr schnell überprüft werden! – user2216