2015-01-08 24 views
3

我目前只是在C++中工作多年後才自學C#。不用說,我需要重新學習很多東西。我的問題如下:使用Console.WriteLine()的複雜I/O

在Windows控制檯應用程序中打印(寫入控制檯窗口)複雜信息(涉及多個變量,文本字符串和換行符)的最佳方法是什麼?

說透徹一點,我會怎麼翻譯類似下面的C++代碼轉換成C#:

int x = 1; int y = 2; double a = 5.4; 

cout << "I have " << x << " item(s), and need you to give" << endl 
    << "me " << y << " item(s). This will cost you " << a << endl 
    << "units." << endl; 

在C++中,這將以下內容打印到控制檯:

我有1項( s),並且需要你給

給我2個項目。這將花費你5.4

單位。

這個例子完全是任意的,但我經常在我的程序中有這樣一個短而複雜的消息。我完全必須重新學習如何格式化輸出,或者在C#中有類似的功能,我還沒有找到(我已經通過了很多Console.IO文檔)。

+1

在C#中確實沒有'out <<'運算符的直接等價物。 'String.Format' /'Console.Write' /'Console.WriteLine'更像'printf'替代品,但它一直用於.Net格式化輸出(如果你願意,你可以自定義格式)作爲涵蓋在MSDN中,重複的問題,或由格蘭特溫尼回答。 –

+0

與論壇網站不同,我們不使用「謝謝」或「任何幫助表示讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts)此外,它是「預先感謝」,而不是「高級謝謝」 –

回答

8

您可以將寫出到控制檯的字符串中指定的佔位,再提供價值,以取代那些佔位符,就像這樣:

Console.WriteLine("I have {0} item(s), and need you to give\r\n" + 
        "me {1} item(s). This will cost you {2} \r\nunits.", x, y, a); 

我認爲是爲了便於閱讀,我會分開它:

Console.WriteLine("I have {0} item(s), and need you to give", x); 
Console.WriteLine("me {0} item(s). This will cost you {1} ", y, a); 
Console.WriteLine("units."); 

如BradleyDotNet指出的,Console.WriteLine()方法不直接執行的魔力。它調用String.Format,後者又使用StringBuilder.AppendFormat

如果你想看看內部發生了什麼,你可以check out the source code here

+2

請注意,在內部,這是利用'String.Format'作爲Borgleader建議的 – BradleyDotNET

+0

不要忘記'使用System; 「 – jmstoker

+0

謝謝!這需要一些習慣,但這是一個好開始。 對不起,有可能重複btw。 – user3776749