Environment.NewLine
A newline on Windows equals "\r\n." To add newlines in a C# string
, there are a couple options—and the best option may depend on your program.
There is a constant from the base class library and the actual string
literal. We review these newline options.
We can run "dotnet" programs through the command-line on Linux. With this platform, a NewLine
is just 1 character, not 2 like on Windows.
using System; class Program { static void Main() { // Run on Linux. var result = Environment.NewLine.Length; Console.WriteLine(result); } }1
Concat
exampleHere we need to create a string
with a line break in the middle of it, which will form a 2-line string
. We will use the Environment.NewLine
constant for this.
NewLine
is defined by .NET and could vary by platform. But it is unlikely to ever equal a different value.using System; class Program { static void Main() { // Use string concat to combine two literals with the newline constant. string s = "First line" + Environment.NewLine + "Second line"; Console.WriteLine(s); } }First line Second line
You do not need to use Environment.NewLine
as in the first example. You can use the "\r\n" constant directly—this may be a better choice.
using System; class Program { static void Main() { // Concat literals. string s = "One line" + "\r\n" + "Another line"; Console.WriteLine(s); } }One line Another line
Environment.NewLine
is a constant property in .NET. And it could be tied to the current executing environment or platform.
L_000b: call string [mscorlib]System.Environment::get_NewLine().method public hidebysig specialname static string get_NewLine() cil managed { .maxstack 8 L_0000: ldstr "\r\n" L_0005: ret }
The above IL is generated when you use NewLine
. The "get_" part indicates that the value is fetched from a property. This is inlined so has no performance penalty.
get_NewLine
and its implementation. You can see it simply returns the "\r\n" string
literal.We used the Environment.NewLine
constant in the C# language. Some developers find the Environment.NewLine
constant has more clarity in their code.