Tôi biết điều này có vẻ giống như một câu hỏi rất ngu ngốc nhưng tôi không có câu trả lời cho câu hỏi này. Một trong những người dùng của chúng tôi đã báo cáo lỗi gần đây và tôi nhận thấy rằng một đoạn mã cũ đang sử dụng != string.Empty
thay vì IsNullOrEmpty()
. Tôi đã sửa nó với IsNullOrEmpty()
và nó bây giờ chạy tốt, nhưng tôi muốn thực sự hiểu vấn đềSo sánh các chuỗi với toán tử! = Cho kết quả khác nhau?
Vấn đề là, cùng một bit mã chạy khác nhau trên một số máy nhất định. Về cơ bản tôi có một đối tượng: context["MODE"]
, được cho là rỗng. Tôi thêm một số xét nghiệm về nó để đăng nhập:
contextBuilder.AppendLine("MODE: |" + context["MODE"] + "|");
contextBuilder.AppendLine("MODE != string.Empty: " + (context["MODE"] != string.Empty));
contextBuilder.AppendLine("MODE TRIM != string.Empty: " + (context["MODE"].ToString().Trim() != string.Empty));
contextBuilder.AppendLine("MODE.IsNullOrEmpty: " + string.IsNullOrEmpty(context["MODE"].ToString()));
contextBuilder.AppendLine("MODE.TRIM.IsNullOrEmpty: " + string.IsNullOrEmpty(context["MODE"].ToString().Trim()));
Dưới đây là các bản ghi của tôi về điều đó chi tiết lĩnh vực:
MODE: ||
MODE != string.Empty: False
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
Dưới đây là các bản ghi của mình:
MODE: ||
MODE != string.Empty: True
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
Như bạn có thể thấy có một sự khác biệt: MODE != string.Empty
là sai cho tôi (có ý nghĩa), True cho anh ta! MODE rõ ràng là không null (nếu không .ToString()
sẽ không thành công) Vấn đề được cố định bằng cách sử dụng IsNullOrEmpty nhưng tôi đang cố gắng tìm ra chính xác lý do tại sao điều này không hoạt động trên các máy của người dùng nhất định và không hoạt động. Thông thường với các bài kiểm tra của tôi một số người trong chúng ta không có vấn đề, khác đã có.
Tôi không thực sự hiểu những gì tôi có thể tìm hiểu về nó. Tại sao chế độ của anh ta khác với null và String.Empty
, nhưng IsNullOrEmpty
trả về true? Ngoài ra, hãy lưu ý rằng hình cắt cũng thực sự là string.Empty
cũng như
Cảm ơn bạn!
'IsNullOrEmpty' thực hiện các phần rỗng bằng cách so sánh' Length' để 0. – juharr
Hãy thử cũng in ra 'bối cảnh [ "Chế độ"]. GetType(). Tên 'là tốt. – juharr
Bạn có thể cung cấp thêm chi tiết về nguồn gốc của giá trị trong 'context [" MODE "]'? Ngoài ra, bạn đã đảm bảo các phiên bản .NET có giống nhau trên cả hai máy không? –