2016-04-01 3 views
0

Ich frage mich, warum ein ‚+‘ in einem Szenario, wie dies erforderlich ist:Warum funktionieren Kommas nicht, um Strings in WriteLine einzuschließen?

string name = "Rick"; 
Console.WriteLine("Hello, " + name); 

Ich hatte den Eindruck, dass die ‚+‘ eine Variable eines anderen Typs war erforderlich ist, und ein String sein könnte inklusive ohne eins. Ist das falsch?

Ferner kann, wenn das der Fall ist, dann warum ist es einfach die Variable überspringen und nicht einen Fehler in einer Situation wie dieser zurück:

string name = "Rick"; 
Console.WriteLine("Hello, " , name); 

Dank.

+1

Console.WriteLine ("Hallo, {0}", Name); –

Antwort

3

Soweit es den Compiler betrifft, versucht die zweite Version, einen zweiten Parameter zu übergeben, für den die Methode WriteLine nicht überladen ist. Die Optionen, die Sie wirklich für diese haben, sind als

Console.WriteLine("Hello, " + name); 
Console.WriteLine($"Hello, {name}"); 
Console.WriteLine(String.Format("Hello, {0}", name)); 
+0

'WriteLine()' hat eine entsprechende Überladung, die den Aufruf von 'Format()' überflüssig macht –

+0

Ah richtig du bist, obwohl wie das OP scheint unsicher über String-Verkettung, so dass es wert sein, lassen Sie es in Fall er wusste nicht von seiner Existenz :) –

+0

Danke. Ich bin verwirrt, weil ich mich daran erinnere, dass ich das dritte Beispiel früher benutzt habe, aber vergessen habe, dass ich {#} brauche. – Jeremy

2

C# verkettet Zeichenfolge mit Operator +. So fügt eine Zeichenkette zu einer anderen Zeichenkette hinzu und erzeugt eine dritte Zeichenkette, die erste und zweite Zeichenketten enthält. Komma verkettet keine Zeichenfolgen, Komma trennt Parameter.

1

Das erste Beispiel folgt:

string name = "Rick"; //string variable 
Console.WriteLine("Hello, " + name); 

der + Operator verwendet wird, um den Wert des String-Variable name und dem Stringliteral "Hello, " verketten.

wird Die resultierende Ausgabe Hello, Rick

Für mehr angezeigt: String Concatenation

Das zweite Beispiel:

string name = "Rick"; 
Console.WriteLine("Hello, " , name); 

die Überlastung Spiele Console.WriteLine(String, Object)

Es erfordert die Verwendung eines Formatierer {0} weil der Formatierer nicht dargestellt wird t wird mit dem zweiten Argument Object nichts passieren (in Ihrem Fall in der Variablen name). Eine richtige Version würde dies geschrieben werden als:

string name = "Rick"; Console.WriteLine("Hello, {0}", name);

Das Objekt String gegossen wird und erstellt eine neue Zeichenfolge mit dem Wert des Namens des {0} Wert zu ersetzen.
Die resultierende Ausgabe, die auf Bildschirm geschrieben wäre: Hello, Rick

mehr Infos ich Ihnen unter der folgenden aussehen würde empfehlen:

  • Console.WriteLine(String, Object)
  • String Concatenation
  • On String Formatters
  • Literals vs Variables
  • 1

    Sie werden verwirrt. in Ihrem ersten Beispiel:

    Console.WriteLine("Hello, " + name); 
    

    die beiden Strings verkettet werden, und das Ergebnis als Parameter an die Console.WriteLine Methode wird übergeben.


    Das zweite Beispiel:

    Console.WriteLine("Hello, " , name); 
    

    tatsächlich a different overload of that method Aufruf, die akzeptiert eine Zeichenfolge und ein Objekt.

    Verwandte Themen