C# Environment.NewLine

Newline

A newline on Windows equals \r\n. To add newlines in a C# string, there are a couple options. There is a constant from the base class library and the actual string literal. We review these newline options.

Environment

Example

Framework: NET

Here we need to create a string with a line break in the middle of it, which will form a two-line string. We will use the Environment.NewLine constant for this, which is defined by the .NET Framework and could vary by platform.

C# program that uses Environment.NewLine

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.Write(s);
	Console.Read();
    }
}

Output

First line
Second line

Example 2

Programming tip

Next, we see that you can simply use a string literal to add a line break. You don't need to use Environment.NewLine as in the first example. You can use the "\r\n" constant directly—this can actually be a better choice.

Note:This constant changes the MSIL generated. It is effective on Windows platforms and is, in practical aspects, the same.

C# program that uses newline constant

using System;

class Program
{
    static void Main()
    {
	//
	// Use "\r\n" string in string concat.
	//
	string s = "One line" +
	    "\r\n" +
	    "Another line";
	Console.Write(s);
	Console.Read();
    }
}

Output

One line
Another line

Implementation

Property

As we noted before, Environment.NewLine is simply a constant property in .NET, and it could be tied to the current executing environment or platform. But almost all C# program deployments use Windows—with the exception of Mono on Linux.

Call instruction

L_000b: call string [mscorlib]System.Environment::get_NewLine()

Implementation of get_NewLine

.method public hidebysig specialname static string get_NewLine() cil managed
{
    .maxstack 8
    L_0000: ldstr "\r\n"
    L_0005: ret
}
Collection abstraction: squares

The above IL is generated when you call Environment.NewLine. The "get_" part simply indicates that the value is fetched from a property. This is inlined so has no performance penalty.

Intermediate LanguageProperty Examples

Next, we look into get_NewLine and its implementation. You can see it simply returns the "\r\n" string literal. You can find more information on the usage and implementation of string literals in the C# language on this website.

String Literal

Tip:Environment.NewLine could result in different constants being returned, such as "\n" on UNIX platforms with Mono.

Also:It is possible that a new character set could have another constant as a line break.

Summary

We use the Environment.NewLine constant in the C# language. Some developers find the Environment.NewLine constant has more clarity in their code. But it is unlikely that we will forget what \r\n or \n mean, so the clarity is no better.


C#: String