Tôi đang đọc Hiệu quả C# bởi Bill Wagner. Trong mục 14 - Giảm thiểu Duplicate Khởi logic, ông cho thấy ví dụ sau đây của việc sử dụng các thông số tùy chọn tính năng mới trong một constructor:Không thể sử dụng String.Empty làm giá trị mặc định cho thông số tùy chọn
public MyClass(int initialCount = 0, string name = "")
ý rằng ông sử dụng ""
thay vì string.Empty
.
Ông bình luận:
Bạn sẽ lưu ý [trong ví dụ trên] rằng các nhà xây dựng thứ hai quy định "" cho giá trị mặc định vào tên tham số , chứ không phải là phong tục hơn
string.Empty
. Đó là vìstring.Empty
không phải là hằng số biên dịch. Nó là một thuộc tính tĩnh được định nghĩa trong lớp chuỗi. Bởi vì nó không phải là một hằng số biên dịch, bạn không thể sử dụng nó cho giá trị mặc định cho một tham số.
Nếu chúng tôi không thể sử dụng số string.Empty
tĩnh trong mọi trường hợp, thì điều đó không đánh bại mục đích của nó? Tôi nghĩ rằng chúng tôi sẽ sử dụng nó để chắc chắn rằng chúng tôi có một phương tiện độc lập hệ thống đề cập đến chuỗi rỗng. Sự hiểu biết của tôi có sai không? Cảm ơn.
CẬP NHẬT
Chỉ cần nhận xét tiếp theo. Theo MSDN:
Mỗi thông số tùy chọn có giá trị mặc định là một phần của định nghĩa. Nếu không có đối số nào được gửi cho tham số đó, giá trị mặc định sẽ được sử dụng. Giá trị mặc định phải là hằng số.
Sau đó, chúng tôi không thể sử dụng System.Environment.NewLine
một trong hai hoặc sử dụng các đối tượng mới được tạo làm giá trị mặc định. Tôi chưa sử dụng VS2010, và điều này thật đáng thất vọng!
Tôi không biết bất kỳ sự khác biệt nào về cách chuỗi rỗng được thể hiện trên các nền tảng khác nhau. Nó không giống như dòng mới. –
Phải, tôi đã nghĩ rằng, vậy thì chỉ có nó trông đẹp hơn trong mã? – Mikeyg36
CLR và không phải là 'Hệ thống' là yếu tố quyết định xem liệu "" có phải là một chuỗi rỗng hay không. Vì vậy, tôi nghĩ rằng bạn có thể giả định một cách an toàn "" là một cách độc lập với hệ thống để tham chiếu đến một chuỗi trên thực thi CLR tuân thủ. –