Sự khác biệt giữa ngôn ngữ và môi trường.NewLine


Câu trả lời:


203

Phụ thuộc vào nền tảng. Trên Windows, nó thực sự là "\ r \ n".

Từ MSDN:

Một chuỗi chứa "\ r \ n" cho các nền tảng không phải là Unix hoặc một chuỗi chứa "\ n" cho các nền tảng Unix.


5
.NET chạy nền tảng UNIX nào để Microsoft đưa vào tài liệu của mình? (Ý tôi là, một phần từ Mono.)
Jack

10
@Jack Bạn có thể ghi vào một tệp sẽ được mở trong nền tảng Unix. Hoặc gửi văn bản trong gói sẽ được nhận bởi một nền tảng unix. Và trong vài tháng nữa .net sẽ chạy trên nền tảng Unix. Nó đã bắt đầu
John Demetriou

Vì vậy, chỉ cho rõ ràng: trên một nền tảng không Unix Environment.NewLine\r\nnhưng \ncũng được gọi là "dòng sản phẩm mới". Tại sao họ không gọi cái sau bằng cái tên nổi tiếng hơn là "line feed" và loại bỏ sự nhầm lẫn? Họ cũng có thể đã sử dụng \l.
rory.ap

156

Thực hiện chính xác Environment.NewLinetừ mã nguồn:

Việc triển khai trong .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";
    }
}

nguồn


Việc triển khai trong .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
    }
}

nguồn (trong System.Private.CoreLib)

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

nguồn (trong System.Runtime.Extensions)


10
yeah :) Vì một số lý do, tôi đã mong đợi việc triển khai .NET là một số chức năng phức tạp lớn
developerbmw

Xem xét sự đơn giản của nguồn trong trường hợp này, nó có lẽ nên là câu trả lời.
Chris Walter

70

Như những người khác đã đề cập, Environment.NewLinetrả về một chuỗi dành riêng cho nền tảng để bắt đầu một dòng mới, đó là:

  • "\r\n" (\ u000D \ u000A) cho Windows
  • "\n" (\ u000A) cho Unix
  • "\r" (\ u000D) cho Mac (nếu có triển khai như vậy)

Lưu ý rằng khi viết lên bàn điều khiển, Môi trường.NewLine không thực sự cần thiết. Luồng điều khiển sẽ dịch "\n"sang trình tự dòng mới thích hợp, nếu cần.


Việc thực hiện Mac không tồn tại. Chỉ cần Mono. Chạy trên bất cứ thứ gì.
Dykam

24
Chỉ cần một lưu ý, đó sẽ là máy Mac cũ; sử dụng máy Mac (OSX) mới\n
BlueRaja - Danny Pflughoeft

2
@Dykam, vâng, nhưng nó chạy rất chậm trên HP48gx của tôi
cod3monk3y

1
Như những người khác đã đề cập và có thể nhìn thấy trong nguồn .Net cũng được đính kèm với câu hỏi này, câu trả lời này không chính xác.
Chris Walter

2
@Blieque chỉ nói rằng nó có thể đúng trong năm 2009, không phải vậy. Tôi đã không kiểm tra.
aloisdg chuyển đến codidact.com 20/07/18

23

Environment.NewLine sẽ trả về ký tự dòng mới cho nền tảng tương ứng mà mã của bạn đang chạy

bạn sẽ thấy điều này rất hữu ích khi bạn triển khai mã của mình trong linux trên khung Mono


8

Từ các tài liệu ...

Một chuỗi chứa "\ r \ n" cho các nền tảng không phải là Unix hoặc một chuỗi chứa "\ n" cho các nền tảng Unix.


4

Môi trường.NewLine sẽ cho "\ r \ n" khi chạy trên Windows. Nếu bạn đang tạo chuỗi cho môi trường dựa trên Unix, bạn không muốn "\ r".


4

Bạn có thể gặp rắc rối khi bạn cố hiển thị thông báo nhiều dòng được phân tách bằng "\ r \ n".

Luôn luôn là một cách thực hành tốt để thực hiện mọi thứ theo cách tiêu chuẩn và sử dụng Môi trường.NewLine

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.