Là một lập trình viên, tôi đã mong đợi điều này để ném một ngoại lệ. Có một lý do tại sao nó xử lý null là ""?C# thêm chuỗi + null không ném một lỗi?
string s = "hello";
string t = null;
Console.WriteLine(s + t);
Output:
chào
Chỉ cần nhấn mạnh câu hỏi của tôi, bạn có biết tại sao quyết định để biến rỗng vào String.Empty đã được thực hiện? Tôi đã mong đợi một số chuỗi được thêm vào nhưng đã có một vấn đề hơn nữa trở lại, nơi nó đã không được lấy nó đúng cách và nó trở lại với null. Vấn đề đã không được chú ý!
Dưới đây là một giả lý do tại sao tôi nghĩ rằng nó là xấu (và tại sao tôi đã bị sốc khi phát hiện ra không có lỗi):
Bạn có thể giả sử tôi quá tải ToString để cung cấp cho các tên của người hoặc các chi tiết về họ.
Person p = PersonDatabase.GetForName("Jimmy Gibbs");
Console.WriteLine("Name is: " + p.ToString());
Ném một ngoại lệ vì p là null
String p = PersonDatabase.GetForName("Jimmy Gibbs").Name;
Console.WriteLine("Name is: " + p);
Không ném một ngoại lệ, mặc dù p là null (nó đối xử với nó như là "").
(Nếu bạn muốn trở thành kén cá chọn canh và nói rằng tôi sẽ không thể để có được tên chính thức GetforName sẽ được null, nghĩ về nó như thế này :)
String p = PersonDatabase.GetNameFromID(1234); // Returns a string or null if not found
Console.WriteLine("Name is: " + p);
(Nếu bạn sử dụng giá trị này trong một danh sách hoặc mảng mà bạn sẽ kết thúc với một mục nhập trống, đó là những gì đã phá vỡ cho tôi, nó đã tạo javascript và cố gắng lấy phần tử theo ID "")
WoW và + null viết hoa chữ cái đầu tiên là dấu cộng :) – Bolu
Tôi chỉ có thể suy đoán là tại sao, nhưng một đối số có lợi sẽ giảm khả năng gây nhầm lẫn cho các nhà phát triển mới làm quen. trường hợp ngoại lệ là kết quả của dereferencing; có chúng gây ra bởi các nhà khai thác có thể không trực quan. Nó không phải là một lập luận rất tốt, theo ý kiến của tôi, nhưng nó sẽ phù hợp với nguyên tắc ít ngạc nhiên nhất (nếu bạn không thêm gì vào cái gì đó, bạn vẫn mong đợi có cái gì đó). –
Nếu bạn có thể sử dụng chuỗi t = null, bạn sẽ có thể sử dụng các toán tử khác với null. – Bolu