使用Console.WriteLine()的复杂I/O

use*_*749 3 c# c++ io console.writeline

经过多年的C++工作,我现在正在教自己C#.毋庸置疑,我需要重新学习很多东西.我的问题如下:

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;
Run Code Online (Sandbox Code Playgroud)

在C++中,这会将以下内容打印到控制台:

我有1件商品,需要你给

给我2件商品.这将花费你5.4

单位.

这个例子完全是武断的,但我的程序中经常会有这样简短而复杂的消息.我是否完全不得不重新学习如何格式化输出,或者我还没有找到C#中的类似功能(我已经挖掘了很多Console.IO文档).

Gra*_*ICA 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);
Run Code Online (Sandbox Code Playgroud)

我认为为了便于阅读,我将其分开:

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.");
Run Code Online (Sandbox Code Playgroud)

正如BradleyDotNet所指出的那样,该Console.WriteLine()方法并没有直接表现出魔力.它调用String.Format,反过来使用StringBuilder.AppendFormat.

如果你想看看内部发生了什么,你可以在这里查看源代码.

  • 请注意,在内部,这是使用'String.Format`作为Borgleader建议. (2认同)