Tôi có một điều kiện trong một ứng dụng silverlight so sánh 2 chuỗi, vì một số lý do khi tôi sử dụng ==
nó trả về false trong khi .Equals()
trả về true .
Đây là mã:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Bất kỳ lý do như tại sao điều này đang xảy ra?
==
, nhưng toán tử không phải là đa hình. Trong mã này, ==
toán tử được gọi trên kiểu object
, so sánh danh tính thay vì giá trị.
==
quá tải dựa trên loại thời gian biên dịch của toán hạng. Tài Content
sản là object
. Các toán tử không phải là ảo, do đó, việc thực hiện mặc định ==
được gọi, đưa ra một so sánh đẳng thức tham chiếu. Với Equals, cuộc gọi chuyển sang phương thức ảo object.Equals(object)
; string
ghi đè phương thức này và thực hiện so sánh thứ tự trên nội dung chuỗi. Xem msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx và referencesource.microsoft.com/#mscorlib/system/string.cs,507 .
==
có kiểu thời gian biên dịch object
và phía bên phải có kiểu thời gian biên dịch string
, thì trình biên dịch C # phải chọn quá tải (có vấn đề, trong trường hợp này) operator ==(object, object)
; nhưng nó sẽ đưa ra một cảnh báo thời gian biên dịch rằng nó có thể là ngoài ý muốn. Vì vậy, đọc các cảnh báo thời gian biên dịch! Để khắc phục sự cố và vẫn sử dụng ==
, hãy đặt phía bên trái sang string
. Nếu tôi nhớ chính xác, văn bản cảnh báo gợi ý rằng.