2017-08-24 2 views
1

In den letzten paar Zeilen des Codes verstehe ich nicht, was die 'var x' und die while-Schleife tut oder darstellt. Dieses Codebeispiel stammt aus einer Treehouse-Abfrage, aber wie sorgt "var x" dafür, dass das Programm wie gewünscht funktioniert? Danke für Ihre Hilfe! :)C# - Was macht die letzte while-Schleife und 'var x'?

+0

wird es Schleifen drucken 'Yay' Eintrittszeiten. Eine for-Schleife wäre klarer gewesen – pm100

+1

Verwenden Sie den Debugger, um durch den Code zu gehen, und Sie werden genau sehen, was es tut. –

+1

x ist ein Zähler, der nach jedem Ausdruck von 'Yay' erhöht wird. Nach x = entry, die Logik in der While-Schleife wird es zwingen, zu beenden (Pause). Sie können stattdessen eine einfache for-Schleife verwenden, wenn Sie die while-loop-Logik etwas kompliziert finden. –

Antwort

0

var ist nur eine syntaktische Abkürzung ausdrücklich die Art des x definieren, zu vermeiden - der Compiler bestimmen kann, welche Art x ist, weil es implizit im Wert zugewiesen wird.

Wie für Ihre Schleife, könnte es so weit vereinfacht werden:

var x = 0; 

while (x++ < entry) { 
    Console.Write("Yay!"); 
} 

Normalerweise würden Sie eine explizite while(true) Schleife vermeiden, weil, wie Sie den Code komplizierter wird es, das Risiko erhöht, dass Ihre Ausgangsbedingung innerhalb der Schleife ist nie erreicht, und Sie enden mit einer Endlosschleife - es ist besser, den Ausgangsausdruck deutlich sichtbar zu haben, anstatt ihn irgendwo innerhalb der Schleife zu verstecken.

0

der idiomatische Weg, um die gleiche Sache zu tun ist,

for(int x = 0; x < entry;x++) 
{ 
    Console.Write("Yay!"); 
} 
2

Das var Schlüsselwort in C# bedeutet "den Typ ableiten".

var x = 0; //Means the same thing as latter 
int x = 0; //The compiler actually CONVERTS the former to this in an early pass when it strips away syntactic sugar 

Der Code, den Sie geschrieben haben, ist sehr ... ein Anfänger suggestiv. Dieser letzte Block ist eine for Schleife. Unwiderruflich. Jede Alternative ist objektiv minderwertig.

Hier ist eine alternative Möglichkeit, es zu schreiben. Zugegeben, urkomisch Overkill, aber Sie bekommen die Idee:

using System; 
using System.Linq; 
using System.Collections.Generic; 

namespace Example 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      int entry = CollectUserInput<int>("Enter the number of times to print \"Yay!\": ", 
       (int x) => x > 0, "Please enter a positive number: "); 

      for (int i=0; i<entry; i++) { 
       Console.Write("Yay!"); 
      } 
     } 

     /// <summary> 
     /// Prompts user for console input; reprompts untils correct type recieved. Returns input as specified type. 
     /// </summary> 
     /// <param name="message">Display message to prompt user for input.</param> 
     private static T CollectUserInput<T>(string message = null) 
     { 
      if (message != null) 
      { 
       Console.WriteLine(message); 
      } 
      while (true) 
      { 
       string rawInput = Console.ReadLine(); 
       try 
       { 
        return (T)Convert.ChangeType(rawInput, typeof(T)); 
       } 
       catch 
       { 
        Console.WriteLine("Please input a response of type: " + typeof(T).ToString()); 
       } 
      } 
     } 

     /// <summary> 
     /// Prompts user for console input; reprompts untils correct type recieved. Returns input as specified type. 
     /// </summary> 
     /// <param name="message">Display message to prompt user for input.</param> 
     /// <param name="validate">Prompt user to reenter input until it passes this validation function.</param> 
     /// <param name="validationFailureMessage">Message displayed to user after each validation failure.</param> 
     private static T CollectUserInput<T>(string message, Func<T, bool> validate, string validationFailureMessage = null) 
     { 
      var input = CollectUserInput<T>(message); 
      bool isValid = validate(input); 
      while (!isValid) 
      { 
       Console.WriteLine(validationFailureMessage); 
       input = CollectUserInput<T>(); 
       isValid = validate(input); 
      } 
      return input; 
     } 
    } 
} 
+0

Oh yeah cuz all dieser verrückte ass code hilft mir als Anfänger xD zu verstehen –