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

本文关键字:复杂 Console WriteLine 使用 | 更新日期: 2023-09-27 18:36:44

经过多年的工作,我目前正在自学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;

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

我有 1 件物品,需要您提供

给我 2 件物品。这将花费您 5.4

单位。

这个例子是完全任意的,但我经常在我的程序中有像这样的简短而复杂的消息。我是否完全必须重新学习如何格式化输出,或者 C# 中是否有我尚未找到的类似功能(我已经挖掘了很多 Console.IO 文档)。

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

您可以在写出到控制台的字符串中指定占位符,然后提供值来替换这些占位符,如下所示:

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

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