2011-05-02 12 views
1

我需要將此行轉換爲一個字符串,因爲我的方法「DisplayMessage」只接受1個參數,所以我該怎麼做?如何將全部轉換爲一個字符串?

_userOptions.DisplayMessage("\nFile Generated: " + 
    BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)) + 
    "\nTime Elapsed: {0} minute(s) {1} second(s)", 
    timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds/10 + "\n"); 
+0

使用的String.format – atoMerz 2011-05-02 14:09:48

+2

使用Environment.NewLine代替\ n – PVitt 2011-05-02 14:11:25

回答

1

你的字符串表示您要撥打的static Format method on the String class,像這樣:

_userOptions.DisplayMessage(string.Format(
    "\nFile Generated: {0}\nTime Elapsed: {1} minute(s) {2} second(s)\n", 
    BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)), 
    timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds/10)); 

然而,這會給你一個問題,因爲你有更多的參數比你在字符串中有佔位符。

此外,給出有關使用「\ n」作爲新行分隔符的註釋,除非您對該特定格式有特定需求(並且您似乎沒有這樣做,但並不表示您正在撰寫數據傳到外部系統的東西),最好使用Environment.NewLine,你可以這樣使用它(注意,這仍然沒有解決你擁有比佔位符更多參數的事實:

_userOptions.DisplayMessage(string.Format(
    "{0}File Generated: {1}{0}Time Elapsed: {2} minute(s) {3} second(s){0}", 
    Environment.NewLine, 
    BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)), 
    timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds/10)); 
+0

你確定你的括號是正確的嗎?檢查... :)我認爲'+「\ n」'進入字符串聲明,而不是參數... – Marco 2011-05-02 14:24:05

+0

@Marco:當您評論時已經在編輯該文件,謝謝指出它。 – casperOne 2011-05-02 14:30:03

3

它看起來像你的DisplayMessage方法不允許字符串格式。嘗試將整個內容(DisplayMessage括號內的所有內容)放入String.Format()方法中。這將使它成爲一個字符串,並仍然允許傳遞多個參數。

+0

同一答案在同一時間。+1爲你:) – Marco 2011-05-02 14:12:54

1

試試這個:

string s= String.Format(
    "\nFile Generated: " + 
    BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)) + 
    "\nTime Elapsed: {0} minute(s) {1} second(s) {2} msec(s)\n", 
    timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds/10); 
_userOptions.DisplayMessage(s); 
0

下面查找。

string str = String.Format("\n" + "File Generated: " + BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)) + "\n" + "Time Elapsed: " + " {0} minute(s)" + " {1} second(s)", timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds/10 + "\n"); 

_userOptions.DiplayMessage(str); 

希望這有助於。

0

而不是{0}和{1},只需直接使用你的論點:

_userOptions.DisplayMessage("\n" + "File Generated: " + BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)) + "\n" + "Time Elapsed:" + timeSpan.Minutes + "minute(s)" + timeSpan.Seconds + "second(s)" + timeSpan.Milliseconds/10 + "\n"); 
+0

這不是一個好的方法來編寫代碼;) 如果你需要改變一個參數,你必須在字符串中搜索並修改... Params是好多了恕我直言:) – Marco 2011-05-02 14:17:15

+0

@Marco:同意,我只是給出了最簡單,最直接的解決方案 – Matthias 2011-05-02 14:27:29

1
var msg = String.Format("\nFile Generated: {0}\nTime Elapsed: {1} minute(s) {2} second(s)\n", BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)), timeSpan.Minutes, timeSpan.Seconds); 

_userOptions.DisplayMessage(msg); 

這應該這樣做...

1

這是在我看來,更優雅:

string message = string.Format("{0}File Generated: {1}{0}Time Elapsed: {2} minute(s) {3} second(s) {4} milliseconds{0}", 
    "\n", BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected)), timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds/10); 
_userOptions.DisplayMessage(message); 

使用Format不需要在字符串上使用任何+運算符。

1

我認爲,你可以使用StringBuilder

StringBuilder sb = new StringBuilder(); 
     sb.Append("\n"); 
     sb.Append("File Generated: "); 
     sb.Append(BinaryWriter.GetBinaryFileName(filePath, Convert.ToInt32(logSelected))); 
     sb.Append("\n"); 
     sb.Append("Time Elapsed: "); 
     sb.Append(timeSpan.Minutes); 
     sb.Append(" minute(s)"); 
     sb.Append(timeSpan.Seconds); 
     sb.Append(" second(s)"); 
     sb.Append(); 
     _userOptions.DisplayMessage(sb.ToString()); 

但我認爲,你有一些bug:你有2個參數,但實際上只有3個