C# C语言中输出换行符的简洁方法# 在C++中,我可以这样做: cout << "Line 1\nLine 2\n"; System.out.printf("Line 1%nLine 2%n");
在C#中,我真的需要做这些麻烦的事情之一:C# C语言中输出换行符的简洁方法# 在C++中,我可以这样做: cout << "Line 1\nLine 2\n"; System.out.printf("Line 1%nLine 2%n");,c#,.net,C#,.net,在C#中,我真的需要做这些麻烦的事情之一: Console.WriteLine("Line 1"); Console.WriteLine("Line 2"); 或 或者有没有一种更简洁的方式,它不是特定于平台的?这应该可以: 你试过以下方法吗 Console.Write("Line 1\nLine2"); 根据您可能需要在Windows上使用\r\n的环境,environment.NewLine将只返回“\r\n”。所以在你的代码中你可以 Console.Write("Line 1\r\nL
Console.WriteLine("Line 1");
Console.WriteLine("Line 2");
或
或者有没有一种更简洁的方式,它不是特定于平台的?这应该可以:
你试过以下方法吗
Console.Write("Line 1\nLine2");
根据您可能需要在Windows上使用
\r\n
的环境,environment.NewLine
将只返回“\r\n”。所以在你的代码中你可以
Console.Write("Line 1\r\nLine 2\r\n");
或者干脆
Console.Write("Line 1\nLine 2\n");
在大多数平台上仍然有效。但否则,您必须使用环境.NewLine
或其他类似实现且名称较短的方法来返回正确的字符串。Console.WriteLine()只需输出一个新行,而不需要其他文本
您可以通过设置
Console.Out.NewLine=“此处的字符串”来更改为换行符定义的字符串代码>\r\n
可以在Windows平台上使用。然而,您的问题并没有说明您的目标平台。如果您希望您的代码是多平台的,并且是经得起未来考验的,那么使用环境可能更安全。换行符
不,C#中没有简洁的、与平台无关的内置换行符占位符
public static class StringExtensions()
{
public static string NL(this string item)
{
return item += Environment.NewLine;
}
}
作为一种解决方法,您可以为Environment.NewLine
public static class StringExtensions()
{
public static string NL(this string item)
{
return item += Environment.NewLine;
}
}
现在您可以使用NL
(由于简洁而选择)
写道:
Hello
World
您还可以创建一个扩展方法,该方法只需将某些内容写入控制台
public static void cout(this string item)
{
Console.WriteLine(item);
//Or Console.Write(item + Environment.NewLine);
}
然后:
"Hello".cout();
通常我会建议在Console类上创建一个扩展方法,但这是不可能的,因为Console是静态的。相反,您可以创建控制台帮助程序:
public static class ConsoleHelper
{
public static void EnvironmentSafeWrite(string s)
{
s = Environment.NewLine == "\n" ? s : s.Replace("\n", Environment.NewLine);
Console.Write(s);
}
}
然后像这样使用它:
ConsoleHelper.EnvironmentSafeWrite("Line 1\nLine 2\n");
只是为了提供另一种解决方法:
使用(C#6.0及更高版本),您可以使用
Console.Write($"Line 1{Environment.NewLine}Line 2{Environment.NewLine}");
不幸的是,您不能用短名称为环境.NewLine
定义常量,因为环境.NewLine
不是常量,但您可以使用静态只读属性作为下一个最佳选择:
private static readonly string NL = Environment.NewLine;
...
void someMethod()
{
...
Console.Write($"Line 1{NL}Line 2{NL}");
...
}
C++平台中的<代码> \n>代码>不可知吗?据我所知,它代表了一个有效的UNIX换行符,但不是完整的Windows换行符(它是代码> \r\n\/COD>),但是在C++方面,我是无知的。UM、java和c你为什么称C为笨重而不是Java?在任何情况下,输出\r\n
都可以工作,因为\n
仍然是它的一部分,因此在Unix系统上会被视为一条新线。感谢大家迄今为止的回答。只是为了确认我的要求:我不是针对特定的平台,它必须是平台无关的。回答上面的注释:C++中的“是”是平台无关的,因为底层类方法将在这样的转换合适的平台上转换\n到\r\n。不,Java和C#没有相同数量的字符用于打印,在Java中,您可以使用printf方法识别“%n”作为平台相关的行终止符,而在C#中,您必须编写Environment.NewLine或类似的东西。哦,还有一条注释,尽管\r\n可以在Unix上工作,\r\n可以在Windows上工作(因为普通控制台窗口对此没有问题)我希望能够将输出重定向到一个文件,我不希望Unix上的vi在每行末尾显示无关的回车符,也不希望Windows上的记事本显示有趣的字符,因为前面没有\r。确切地说,OP正在寻找一种与平台无关的解决方案,而不是环境。NewLine
.thanks。我确实想成为多平台和未来的证明。但是,我想找一些比必须使用单独的字符串常量(如Environment.NewLine)更简洁的东西,因为我有许多密切相关的字符串要在单独的行上输出,我想用一个写调用来完成这一切。在他的原始示例中使用您的方法Eng.Lead .WordLoad(“1行”.nl()+“行2”.nl()),它仍然不像其他语言中的原始示例那样简洁。@ Rikl你看到我的解决方案在底部吗?它和C++一样简洁(<代码> .cOUTE()/代码>)vs.代码> cOUT谢谢乔治,好主意,但是我不知道“hello”。可以容纳cout@Klitos的等价物。您可以为您想要的每种方式创建一个扩展方法。如果您想要创建一个自定义分隔符并创建一个插入环境的扩展方法。为此,请使用NewLine
。我的观点是:扩展方法可以为您解决这个“问题”。谢谢Yuriy,我认为您是一个没错,为了确保它在所有平台上都能正常工作,我需要使用Environment.NewLine。这有点令人失望,因为Java在其字符串格式化程序方法中有“%n”指令,而C#似乎没有,尽管可以说它在许多其他方面比Java好。
Console.Write($"Line 1{Environment.NewLine}Line 2{Environment.NewLine}");
private static readonly string NL = Environment.NewLine;
...
void someMethod()
{
...
Console.Write($"Line 1{NL}Line 2{NL}");
...
}