Różnica między „\ n” a środowiskiem. Nowa linia

209

Jaka jest różnica między dwoma, jeśli w ogóle (w odniesieniu do .Net)?

Prerak K
źródło

Odpowiedzi:

203

Zależy od platformy. W systemie Windows jest to w rzeczywistości „\ r \ n”.

Z MSDN:

Ciąg zawierający „\ r \ n” dla platform innych niż Unix lub ciąg zawierający „\ n” dla platform Unix.

Anthony
źródło
5
Którą platformę UNIX .NET obsługuje Microsoft w swoim dokumencie? (Mam na myśli część z Mono.)
Jack
10
@Jack Możesz pisać do pliku, który zostanie otwarty na platformie Unix. Lub wysyłanie tekstu w pakiecie, który zostanie odebrany przez platformę unix. Za kilka miesięcy .net będzie działał na platformach Unix. To się już zaczęło
John Demetriou
Więc po prostu dla jasności: na platformie Unix nie Environment.NewLinejest \r\n, ale \njest również nazywany „nowa linia”. Dlaczego nie nazwali tego drugiego bardziej znaną nazwą „line feed” i nie rozwiewali zamieszania? Przydałyby się \lrównież.
rory.ap
157

Dokładna implementacja Environment.NewLinez kodu źródłowego:

Implementacja w .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";
    }
}

źródło


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

źródło (w System.Private.CoreLib)

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

źródło (w System.Runtime.Extensions)

aloisdg przechodzi na codidact.com
źródło
10
tak :) Z jakiegoś powodu spodziewałem się, że implementacja .NET będzie ogromną, skomplikowaną funkcją
developerbmw
Biorąc pod uwagę prostotę źródła w tym przypadku, prawdopodobnie powinna to być odpowiedź.
Chris Walter
70

Jak wspomnieli inni, Environment.NewLinezwraca specyficzny dla platformy ciąg znaków dla rozpoczęcia nowego wiersza, który powinien być:

  • "\r\n" (\ u000D \ u000A) dla systemu Windows
  • "\n" (\ u000A) dla Uniksa
  • "\r" (\ u000D) dla komputerów Mac (jeśli taka implementacja istniała)

Pamiętaj, że pisząc do konsoli, Environment.NewLine nie jest absolutnie konieczne. W "\n"razie potrzeby strumień konsoli przełoży się na odpowiednią sekwencję nowego wiersza.

P Tatusiu
źródło
Implementacja Mac istnieje. Po prostu Mono. Działa na cokolwiek.
Dykam
24
Tylko uwaga, to byłyby stare macy; nowy \n
Mac
2
@Dykam, tak, ale działa bardzo wolno na moim HP48gx
cod3monk3y
1
Jak wspomnieli inni i jak widać w źródle .Net również dołączonym do tego pytania, ta odpowiedź jest nieprawidłowa.
Chris Walter
2
@Blieque mówi tylko, że mogło to być prawdą w 2009 roku, a nie tak było. Nie sprawdziłem.
aloisdg przenosi się do codidact.com
23

Environment.NewLine zwróci znak nowego wiersza dla odpowiedniej platformy, na której działa Twój kod

znajdziesz to bardzo przydatne, gdy wdrożyć swój kod w systemie Linux na Mono ram

Rony
źródło
8

Z dokumentów ...

Ciąg zawierający „\ r \ n” dla platform innych niż Unix lub ciąg zawierający „\ n” dla platform Unix.

JP Alioto
źródło
4

Environment.NewLine da „\ r \ n” po uruchomieniu w systemie Windows. Jeśli generujesz ciągi dla środowisk opartych na Uniksie, nie chcesz „\ r”.

Jeff Meatball Yang
źródło
4

Możesz wpaść w kłopoty, gdy próbujesz wyświetlić wieloliniowy komunikat oddzielony „\ r \ n”.

Dobrą praktyką jest robienie rzeczy w standardowy sposób i korzystanie z Environment.NewLine

Yahya
źródło