如何将所有转换为一个字符串?

时间:2011-05-02 14:05:47

标签: c# string

我需要在一个字符串中转换这一行,因为我的方法“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");

9 个答案:

答案 0 :(得分:3)

看起来您的DisplayMessage方法不允许使用字符串格式。尝试将整个内容(DisplayMessage的括号内的所有内容)放在String.Format()方法中。这将使它成为一个字符串,仍然允许您传递的多个参数。

答案 1 :(得分: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);

答案 2 :(得分: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);

应该这样做......

答案 3 :(得分:1)

我想你想要use String.Format。这需要一个字符串,并用参数索引替换{#}

示例:

String.Format("Hi {0}, welcome to Stack Overflow!", "ale");

您可能需要查看How should I concatenate strings?

答案 4 :(得分: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));

答案 5 :(得分: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,不需要在字符串上使用任何+运算符。

答案 6 :(得分: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());

但我认为,你有一些错误:你有2个参数但实际上是3

答案 7 :(得分: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);

希望这有帮助。

答案 8 :(得分: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");
相关问题