Ai đó đã nói trong chủ đề thảo luận này rằng bạn không thể tạo ra một chuỗi từ không có gì.
(đó là một cụm từ tốt đẹp như tôi nghĩ). Nhưng có - bạn có thể :-), như ví dụ sau đây cho thấy:
var x = null + (string)null;
var wtf = x.ToString();
hoạt động tốt và không ném một ngoại lệ nào cả. Sự khác biệt duy nhất là bạn cần bỏ một trong các null thành một chuỗi - nếu bạn loại bỏ (chuỗi) , thì ví dụ vẫn biên dịch, nhưng ném một ngoại lệ thời gian chạy: "Toán tử '+' không rõ ràng trên các toán hạng của nhập '<null>' và '<null>' ".
NB Trong ví dụ mã ở trên, giá trị của x không phải là null như bạn mong đợi, nó thực sự là một chuỗi rỗng sau khi bạn đã chuyển một trong các toán hạng thành một chuỗi.
Một sự thật thú vị khác là trong C # / .NET , cách null
xử lý không phải lúc nào cũng giống nhau nếu bạn xem xét các loại dữ liệu khác nhau. Ví dụ:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
Xem xét dòng đầu tiên của đoạn mã: Nếu x
là một biến số nguyên không int?
có giá trị (nghĩa là ) có chứa giá trị 1
, thì bạn sẽ nhận được kết quả <null>
trở lại. Nếu đó là một chuỗi (như được hiển thị trong nhận xét) có giá trị "1"
, thì bạn sẽ nhận "1"
lại chứ không phải là<null>
.
NB Cũng thú vị: Nếu bạn đang sử dụng var x = 1;
cho dòng đầu tiên, thì bạn đang gặp lỗi thời gian chạy. Tại sao? Bởi vì phép gán sẽ biến biến x
thành kiểu dữ liệu int
, không phải là null. Trình biên dịch không giả định int?
ở đây, và do đó thất bại trong dòng thứ 2 null
được thêm vào.
null.ToString()
được đặt tênwtf
. Tại sao điều đó làm bạn ngạc nhiên? Bạn không thể gọi một phương thức cá thể khi bạn không có gì để gọi nó từ vị trí đầu tiên.