Tại sao nên sử dụng chuỗi.Empty trên Giao dịch khi gán cho đối tượng chuỗi


13

Tôi đã chạy StyleCop qua mã của mình và một trong những khuyến nghị SA1122 là sử dụng chuỗi.Empty thay vì "" khi gán một chuỗi trống cho một giá trị.

Câu hỏi của tôi là tại sao điều này được coi là thực hành tốt nhất. Hoặc, đây được coi là thực hành tốt nhất? Tôi giả sử không có sự khác biệt về trình biên dịch giữa hai câu lệnh vì vậy tôi chỉ có thể nghĩ rằng đó là một thứ dễ đọc?

Câu hỏi và câu trả lời

Jon Skeet trả lời câu hỏi


5
Tôi chắc chắn rằng điều này đã được hỏi và trả lời trên Stack Overflow - nhưng tôi gặp khó khăn khi tìm thấy nó. Đó là để làm với thực tế là nó phải khởi tạo một đối tượng chuỗi mới cho ""nhưng khôngstring.Empty
ChrisF

@ChrisF Ahh, đã không nghĩ đến việc nhìn vào stack stack cho loại câu hỏi này. Tôi sẽ có một giang hồ.
dreza

1
câu hỏi kép về stackoverflow: stackoverflow.com/questions/151472/ trên
quentin-starin

@ChrisF - Nó đã được hỏi về SO. Hơnhơnhơn ...
Oded

1
Ở đây chúng tôi đi - stackoverflow.com/questions/151472/ trên - trở lại từ tháng 9 năm 2008
ChrisF

Câu trả lời:


11

Một lý do hợp lệ là nó làm cho nó rõ ràng đây không phải là một lỗi đánh máy hoặc giữ chỗ, mà bạn thực sự có ý định sử dụng chuỗi trống ở đây.

Tôi không biết nếu nó được coi là "thực hành tốt nhất".


7

Tôi tưởng tượng có hai lý do, một là vì khả năng đọc và hai lý do để tăng hiệu suất nhỏ.

Dễ đọc: dễ dàng hơn rất nhiều để nhận ra string.Empty hơn "". Tìm kiếm string.Emptycũng thường sẽ dễ dàng hơn và có thể chính xác hơn so với tìm kiếm theo nghĩa đen. Nó cũng làm rõ ý định: bạn không chỉ mắc lỗi đánh máy hoặc quên hoàn thành một cái gì đó, bạn thực sự muốn chuỗi trống.

Lý do hiệu suất là do thực tập . Bạn thấy đấy, bộ thực thi giữ một bảng các chuỗi được sử dụng trước đó để nó có thể nhanh chóng thực hiện so sánh chuỗi mà không thực sự kiểm tra từng ký tự. string.Emptyđã là một tài liệu tham khảo được thực tập đến ""nơi mà việc gõ chữ có thể không cung cấp cho bạn phiên bản đã thực hiện, do đó gây ra một cú đánh hiệu suất nhẹ.


7
một nitpick, gõ chữ "" sẽ luôn cung cấp cho bạn cùng một phiên bản "", ít nhất là từ .Net 2 trở lên.
quentin-starin

Đúng vậy, bài viết thực tập về MSDN hơi khó theo dõi về điểm đó. Có vẻ như "" và chuỗi.Empty nên trỏ đến cùng một chuỗi được liên kết, nhưng dường như chỉ ra một số khác biệt giữa các phiên bản thời gian chạy .net. Tôi nghĩ rằng bất kỳ chuỗi ký tự nào xuất hiện nhiều lần trong mã sẽ được thực hiện vào lần thứ hai và sử dụng thêm, vâng?
CodexArcanum

4
Ngoài ra tôi nên nhấn mạnh rằng khi tôi nói nhẹ, tôi có nghĩa là siêu nhỏ. "Vì hiệu suất" không phải là lý do để chuyển từ đại diện này sang đại diện khác, đó chỉ là một điều gọn gàng đáng để biết về thời gian chạy.
CodexArcanum

4
Cũng cần lưu ý rằng khía cạnh hiệu suất chỉ đúng với việc biên dịch. Khi cả hai biên dịch xuống cùng một IL, hiệu năng thời gian chạy phải giống hệt nhau.
lzcd

sự gia tăng hiệu suất đó sẽ chỉ được biên dịch
ratchet freak

4

string.Empty chiến thắng trong một trường hợp thực sự góc, có thể dẫn đến một số lỗi ma thuật và rất khó để gỡ lỗi:

Nếu có một không gian zero chiều rộng trong "".


0

Theo một số tài liệu tôi tìm thấy, nó phải làm với những gì được trình biên dịch phát ra.

Một tìm kiếm nhanh cho thấy: http://stylecop.soyuz5.com/SA1122.html

Tại sao nó được nộp theo "Quy tắc dễ đọc" với mô tả đó là khó hiểu.

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.