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 Contentsả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); stringghi đè 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 objectvà 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.
