"\n"和Environment.NewLine之间的区别

250

两者之间有什么不同 (关于.Net方面)?

7个回答

232

根据操作系统平台而定。在Windows上实际上是 "\r\n"。

来自MSDN:

对于非Unix平台,它包含 "\r\n" 的字符串;对于Unix平台,它包含 "\n" 的字符串。


5
除了Mono之外,.NET运行在哪个UNIX平台上,微软将其放入了文档中? - Jack
13
@Jack,你可能正在编写将在Unix平台上打开的文件。或者发送将被Unix平台接收的数据包。而且在几个月内,.net将在Unix平台上运行。它已经开始了。 - John Demetriou
为了澄清一下:在非Unix平台上,Environment.NewLine\r\n,但\n也被称为“新行”。为什么他们不直接用更为常见的名称“换行符”来称呼后者,以消除混淆呢?他们本可以使用\l - rory.ap

177

Environment.NewLine的精确实现来自源代码:

.NET 4.6.1中的实现:

/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the given
**        platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
    get {
        Contract.Ensures(Contract.Result<String>() != null);
        return "\r\n";
    }
}

源代码


.NET Core中的实现:

/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the
**        given platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
    get {
        Contract.Ensures(Contract.Result() != null);
#if !PLATFORM_UNIX
        return "\r\n";
#else
        return "\n";
#endif // !PLATFORM_UNIX
    }
}

源代码(在System.Private.CoreLib中)

public static string NewLine => "\r\n";

源代码(在System.Runtime.Extensions中)


17
是的 :) 不知为何,我一直以为.NET实现会是一个非常复杂的函数。 - brettwhiteman
1
考虑到这种情况下源代码的简单性,它可能应该是答案。 - Chris Walter

70

正如其他人提到的,Environment.NewLine 返回一个平台特定的字符串以开始新行,这应该是:

  • "\r\n"(\u000D\u000A)适用于Windows
  • "\n"(\u000A)适用于Unix
  • "\r"(\u000D)适用于Mac(如果有此类实现)

请注意,在写入控制台时,Environment.NewLine 并不是必须的。如果需要,控制台流将把"\n"转换为适当的换行序列。


28
请注意,这指的是旧版的苹果电脑;新版(OSX)的苹果电脑使用\n - BlueRaja - Danny Pflughoeft
2
@Dykam,是的,但在我的HP48gx上运行得非常慢。 - cod3monk3y
@cod3monk3y:相比我的HP48sx,那速度真快! - awe
1
正如其他人所提到的,并且正如附加在此问题中的 .Net 源代码所显示的那样,这个答案是不正确的。 - Chris Walter
2
@Blieque 只是说这可能在2009年是正确的,而不是说它确实如此。我没有核实过。 - aloisdg
显示剩余3条评论

27

Environment.NewLine会返回当前代码所运行在的平台对应的换行符。

当你将代码部署到Mono框架上的Linux系统时,你会发现这非常有用。


8

文档中得知...

字符串包含"\r\n",适用于非Unix平台;或者包含"\n"的字符串,适用于Unix平台。


5

当您尝试显示使用"\r\n"分隔的多行消息时,可能会遇到麻烦。

按照标准方式进行操作并使用Environment.NewLine始终是一个好习惯。


4

在Windows上运行Environment.NewLine会得到"\r\n"。如果您正在为基于Unix的环境生成字符串,则不需要"\r"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接