「\ n」とEnvironment.NewLineの違い


回答:


203

プラットフォームによって異なります。Windowsでは、実際には「\ r \ n」です。

MSDNから:

非UNIXプラットフォームの場合は「\ r \ n」を含む文字列、Unixプラットフォームの場合は「\ n」を含む文字列。


5
Microsoftに対して.NETが実行するUNIXプラットフォームはどれですか?(つまり、Monoの一部です。)
Jack

10
@ジャックUnixプラットフォームで開かれるファイルに書き込んでいる可能性があります。または、UNIXプラットフォームで受信されるパッケージでテキストを送信します。また、数か月以内に.netがUnixプラットフォームで実行されるようになります。それはすでに始まっています
John Demetriou

だから明確にするため:Unix以外のプラットフォームでEnvironment.NewLineある\r\nが、\nまた「新しい行」と呼ばれています。なぜ後者をよりよく知られている名前で「改行」と呼んで混乱をなくさなかったのでしょうか。彼らも使用できたでしょう\l
rory.ap 2018

157

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


10
ええ:)なんらかの理由で、.NETの実装は巨大で複雑な関数になると思っていました
developerbmw

この場合のソースの単純さを考えると、おそらくそれが答えになるはずです。
Chris Walter

70

他の人が述べたように、Environment.NewLine新しい行を開始するためのプラットフォーム固有の文字列を返します。

  • "\r\n" (\ u000D \ u000A)for Windows
  • "\n" (\ u000A)Unix
  • "\r" (\ u000D)for Mac(そのような実装が存在する場合)

コンソールに書き込む場合、Environment.NewLineは厳密には必要ありません。コンソールストリームは"\n"、必要に応じて適切な改行シーケンスに変換されます。


Macの実装は存在します。ただモノ。何でも実行します。
2010年

24
ただのメモ、それは古いマックでしょう。新しい(OSX)\n
Macの

2
@Dykam、そうですが、私のHP48gxでは実際に遅いように動作します
cod3monk3y

1
他の人が述べたように、またこの質問に添付されている.Netソースに表示されているように、この答えは正しくありません。
Chris Walter

2
@Bliequeは、2009年には本当だったかもしれないと言っただけで、そうではなかった。確認しませんでした。
aloisdgがcodidact.comに移動

23

Environment.NewLine コードが実行されている対応するプラットフォームの改行文字を返します

これは、MonoフレームワークのLinuxにコードをデプロイするときに非常に便利です。


8

ドキュメントから...

非UNIXプラットフォームの場合は「\ r \ n」を含む文字列、Unixプラットフォームの場合は「\ n」を含む文字列。



4

「\ r \ n」で区切られた複数行のメッセージを表示しようとすると、問題が発生する可能性があります。

標準的な方法で処理を行い、Environment.NewLineを使用することは常に良い習慣です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.