2017-02-21 4 views
-4

Kann mir jemand sagen, wie der Code innerhalb der while(**this code here**){//rest of the code} funktioniert. Ich verstehe, wenn es innerhalb der {} war, aber es ist in der Bedingung und seine Schleife, bis es erfolgreich eine Zahl analysiert. Wie funktioniert das ?Ausführen von Code innerhalb der while Ausdruckanweisung

+1

'int.TryParse' true zurück, wenn es erfolgreich den String parst es aus Console.ReadLine bekommen(). Das '!' Davor bedeutet, das Bool umzukehren, also führt das 'while' den Code in den Parens aus und wenn' int.TryParse' false zurückgibt, wird das 'while' erneut ausgeführt - und immer wieder, bis 'int.TryParse' gibt true zurück. –

+1

also, wenn ich richtig verstehe, wenn es falsch ist, tut es die Arbeit in der {} dann noch einmal und damit meinst du, es läuft die ganze try.parse wieder und wenn erfolgreich out der int und zurück wahr? –

+1

Das ist richtig, jedes Mal, wenn es wieder läuft, ruft es 'Console.ReadLine()' noch einmal für neue Eingabe auf, übergibt das an 'int.TryParse()', das versucht, den neuen Wert usw. bis zum Parsen zu analysieren ist erfolgreich und bricht aus der Schleife aus. Eine [do/while-Schleife] (https://msdn.microsoft.com/en-us/library/370s1zax.aspx?f=255&MSPPError=-2147217396) ist eine andere Möglichkeit, um diesen Code zu schreiben, und möglicherweise einfacher zu bekommen Kopf herum. –

Antwort

3

int.TryParse gibt true zurück, wenn sie erfolgreich die Zeichenfolge analysiert es aus Console.ReadLine() bekommen. Die ! vor ihm bedeutet, den Booleschen Wert von int.TryParse zurück umkehren, so dass die while führt den Code in dem Pars, und wenn int.TryParse false zurück, wird das falsch zu einem true umgekehrt und die während führt wieder - und immer wieder , bis int.TryParse Wahr zurückgibt. "While executs" bedeutet, dass der Code in den Parens zuerst ausgeführt wird. Wenn das Ergebnis true ist, wird der while-while ebenfalls ausgeführt.

Hier ist eine andere Möglichkeit, den gleichen Code zu schreiben. Es ist ein wenig weniger kompakt, aber könnte einfacher sein, zu folgen:

int VillainId = -1; 
bool parseOK = false; 
do 
{ 
    Console.Write("Enter VillainId: "); 

    parseOK = int.TryParse(Console.ReadLine(), out VillainId); 

    if (!parseOK) 
    { 
     Console.WriteLine("You need to enter a valid Villain Id!"); 
    } 
} while (! parseOK); 
2

int.TryParse() kehrt true, wenn die Konvertierung erfolgreich war und die ! (logical negation operator) invertiert den boolean Wert in seiner rechten Seite (!true ist gleich zu false).

Die Bedingung in whilewird jede Schleife ausgewertet, so, jede ungültige Eingabe des Blockcode in while() ausgeführt.

Die Strömung ist, im Grunde:

Console.Write("Enter VillainId: "); 
// asks to user input 

while (!int.TryParse(Console.ReadLine(), out VillainId)) 
// while the conversion is not successfull 
{ 
    Console.WriteLine("You need to enter a valid Villain Id!"); 
    Console.Write("Enter VillainId: "); 
    // asks for user to input valid data 
} 
+0

, dass ich verstehe, was mich verwirrt, ist die While-Schleife führen Sie die try.parse jedes Mal, wenn es für die Bedingung zu überprüfen? –

+0

@StoyanGrigorov Führen Sie den Code aus und finden Sie es selbst heraus. – Servy

+0

Nachdem ich Ed Plunketts Kommentare gelesen habe, verstehe ich jetzt, wie es klar funktioniert. Danke für die Eingabe :) –

Verwandte Themen