2011-05-02 56 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个