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.