关于c#:区别“

Difference between “
” and Environment.NewLine

如果有(关于.NET),这两者有什么区别?


取决于平台。在Windows上,它实际上是"
"。

来自msdn:

A string containing"

" for
non-Unix platforms, or a string
containing"
" for Unix platforms.


从源代码精确实现Environment.NewLine

.NET 4.6.1中的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the given
**        platform.
**Returns:

 on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/

public static String NewLine {
    get {
        Contract.Ensures(Contract.Result<String>() != null);
        return"

"
;
    }
}

来源

.NET核心中的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the
**        given platform.
**Returns:

 on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/

public static String NewLine {
    get {
        Contract.Ensures(Contract.Result() != null);
#if !PLATFORM_UNIX
        return"

"
;
#else
        return"
"
;
#endif // !PLATFORM_UNIX
    }
}

来源(在System.Private.CoreLib中)

1
2
3
public static string NewLine =>"

"
;

来源(在System.Runtime.Extensions中)


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

  • 用于Windows的"

    "(u000du000a)

  • 用于Unix的"
    "
    (u000a)
  • Mac的"
    "
    (u000d)(如果存在这种实现)

请注意,在向控制台写入时,environment.newline不是严格必需的。如有必要,控制台流将把"
"
转换为适当的新行序列。


Environment.NewLine将返回运行代码的相应平台的换行符。

当您在Linux中部署Mono框架上的代码时,您会发现这非常有用。


从医生那里…

A string containing"

" for
non-Unix platforms, or a string
containing"
" for Unix platforms.


当试图显示用"
"分隔的多行消息时,可能会遇到问题。

以标准的方式做事并使用环境总是一个很好的实践。


在Windows上运行时,environment.newline将给出"
"。如果要为基于Unix的环境生成字符串,则不需要使用"
"。