【问题标题】:Difference between "\n" and Environment.NewLine"\n" 和 Environment.NewLine 的区别
【发布时间】:2010-11-04 04:26:54
【问题描述】:

两者之间有什么区别(如果有的话)(对于 .Net)?

【问题讨论】:

    标签: c# .net cross-platform


    【解决方案1】:

    源码中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";
        }
    }
    

    source


    .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
        }
    }
    

    source(在System.Private.CoreLib

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

    source(在System.Runtime.Extensions

    【讨论】:

    • 是的 :) 出于某种原因,我期望 .NET 实现是一些非常复杂的功能
    • 考虑到本例中来源的简单性,应该是答案。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      以标准方式做事并使用 Environment.NewLine 总是一个好习惯

      【讨论】:

        【解决方案4】:

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

        来自 MSDN:

        包含“\r\n”的字符串 非 Unix 平台,或字符串 对于 Unix 平台,包含“\n”。

        【讨论】:

        • .NET 运行到哪个 UNIX 平台,Microsoft 将其放入其文档中? (我的意思是,来自 Mono 的一部分。)
        • @Jack 您可能正在写入将在 Unix 平台上打开的文件。或发送将由 unix 平台接收的包中的文本。几个月后,.net 将在 Unix 平台上运行。已经开始了
        • 为了清楚起见:在非 Unix 平台上 Environment.NewLine\r\n\n 也称为“新行”。他们为什么不直接将后者称为“换行”并消除混淆呢?他们也可以使用\l
        【解决方案5】:

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

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

        请注意,在写入控制台时,Environment.NewLine 并不是绝对必要的。如有必要,控制台流会将"\n" 转换为适当的换行符序列。

        【讨论】:

        • Mac 实现确实存在。只是单声道。可以在任何东西上运行。
        • 请注意,那将是旧的 Mac;新 (OSX) mac 使用 \n
        • @Dykam,是的,但它在我的 HP48gx 上运行起来非常慢
        • 正如其他人所提到的,并且在 .Net 源代码中也可以看到这个问题,这个答案是不正确的。
        • @Blieque 只是说这在 2009 年可能是真的,但事实并非如此。我没查。
        【解决方案6】:

        Environment.NewLine 在 Windows 上运行时将给出“\r\n”。如果要为基于 Unix 的环境生成字符串,则不需要 "\r"。

        【讨论】:

          【解决方案7】:

          来自docs ...

          包含“\r\n”的字符串 非 Unix 平台,或字符串 对于 Unix 平台,包含“\n”。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-29
            • 1970-01-01
            • 2013-05-14
            • 2019-01-28
            • 2011-01-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多