Như Jaroslav Jandek nói (xin lỗi tôi không thể bình luận, không đủ uy tín)
Bởi vì nó so sánh hai trường hợp, không phải giá trị của họ (hai tài liệu tham khảo).
Và thực sự nó cũng tương tự đối với tấn các trường hợp khác! Đối với cựu
IPAddress ip1 = IPAddress.Parse("192.168.0.1");
IPAddress ip2 = IPAddress.Parse("192.168.0.1");
địa chỉ IP Cả đại diện cùng một địa chỉ, nhưng bạn phải hai trường hợp riêng biệt của lớp IPAddress. Vì vậy, tất nhiên "ip1 == ip2" và "ip1.Equals (ip2)" đều sai, bởi vì chúng không trỏ đến cùng một đối tượng.
Bây giờ, nếu bạn chọn "ip1.Address == ip2.Address", kết quả sẽ đúng với IPAddress.Address là "dài", vì vậy bạn so sánh 2 loại giá trị. Lưu ý rằng "ip1.ToString() == ip2.ToString()" cũng sẽ đúng ngay cả khi chuỗi là loại tham chiếu không phải là loại giá trị (nhưng chuỗi thực sự là đặc biệt).
Vì vậy, thực sự trong trường hợp của bạn, bạn muốn so sánh thuộc tính FullName (đó là một chuỗi nên không có vấn đề gì).
Bạn nói
Là nó chỉ bằng cách sử dụng các thuộc tính, ví dụ: tài sản .FullName rằng bạn đang so sánh giá trị chứ không phải là ví dụ?
Thực tế nó có nhiều việc phải làm hơn cho dù thuộc tính là loại giá trị hoặc loại tham chiếu. Ngoài ra, khi so sánh các loại tham chiếu, trong hầu hết các trường hợp, so sánh sẽ có hay không trỏ đến cùng một đối tượng, nhưng có thể ghi đè lên phương thức hoặc tạo toán tử sao cho so sánh được thực hiện trên các đối tượng Jaroslav Jandek đã chỉ ra).
HTH
Lý do so sánh các đối tượng DirectoryInfo là gì? Có lẽ bạn nên so sánh .FullPath? – griZZZly8
Đó không phải là những con đường giống nhau. Đây có phải là một loại thử nghiệm Stroop không? –
Ngoài ra, dấu ngoặc ôm của bạn cũng đã được nhận xét. Nếu bạn muốn chúng tôi đặt năng lượng vào để giúp bạn, bạn sẽ không đặt năng lượng vào việc đặt một câu hỏi hay? –