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


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.


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)


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.


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


8

Z dokumentów ...

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


4

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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.