2016-04-01 58 views
0

我很奇怪,爲什麼一個「+」,需要在方案是這樣的:爲什麼逗號無法在WriteLine中包含字符串?

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

我的印象是「+」是需要的包括其他類型的變量下,和一個字符串可能沒有一個包含。這是不正確的?

此外,如果是這樣的話,那麼它爲什麼直接跳過該變量,在這樣的情況下不會返回錯誤:

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

感謝。

+1

Console.WriteLine(「Hello,{0}」,name); –

回答

3

就編譯器而言,第二個版本試圖傳遞第二個參數,其中WriteLine方法沒有被重載。你真的有這個選項如下

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

'WriteLine()'確實有一個適當的重載,使得調用'Format()'不必要 –

+0

啊,你是啊,雖然OP似乎不確定字符串連接,所以它可能值得留下,以防萬一他不知道它的存在:) –

+0

謝謝。我很困惑,因爲我記得早些時候使用過你的第三個例子,但忘記了需要的{#}。 – Jeremy

2

C#使用運算符+連接字符串。所以,一個字符串添加到另一個字符串中,創建包含第一個和第二個字符串的第三個字符串逗號不連接字符串,逗號分隔參數。

1

第一個例子:

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

+操作用來連接字符串變量name和字符串字面"Hello, "的價值。

所產生的輸出將是Hello, Rick

更多見:String Concatenation

第二個例子:

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

匹配過載 Console.WriteLine(String, Object)

它需要使用一個格式化的{0}因爲格式化程序不是presen t第二個參數Object(在你的情況下在變量name中)什麼都不會發生。

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

的對象轉換爲字符串,並創建了名稱替換{0}值的值一個新的字符串:作爲這方面的一個正確的版本將被寫入。
寫入到屏幕輸出結果爲:Hello, Rick

欲瞭解更多信息,我建議你看看下面:

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

    你會感到困惑。在第一個例子:

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

    兩個字符串被連接,並且所述結果被作爲一個參數對Console.WriteLine方法傳遞。


    第二個例子:

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

    實際上正在呼叫a different overload of that method,接受字符串和一個對象。

    相關問題