Jak mówi Jaroslav Jandek (przepraszam nie mogę się wypowiedzieć, nie wystarczy reputacja)
Ponieważ porównuje te dwie instancji, a nie ich wartość (dwa referencje).
Rzeczywiście jest tak samo w przypadku wielu innych przypadków! Ex
IPAddress ip1 = IPAddress.Parse("192.168.0.1");
IPAddress ip2 = IPAddress.Parse("192.168.0.1");
adresy IP Obie reprezentują ten sam adres, ale trzeba dwa odrębne przypadki klasy IPADDRESS. Więc oczywiście "ip1 == ip2" i "ip1.Equals (ip2)" są fałszywe, ponieważ nie wskazują na ten sam obiekt.
Teraz jeśli zaznaczysz "ip1.Address == ip2.Address" wynik będzie prawdziwy, jak adres IP. Adres jest "długi", więc porównujesz 2 typy wartości. Zauważ, że "ip1.ToString() == ip2.ToString()" będzie również prawdziwe, nawet jeśli ciąg jest typem referencyjnym, a nie typem wartości (ale łańcuchy są naprawdę specjalne).
Tak naprawdę w twoim przypadku chcesz porównać właściwość FullName (to ciąg, więc nie ma problemu).
Mówisz
Czy tylko za pomocą właściwości, to znaczy właściwość .FullName że porównujesz wartość zamiast instancji?
Właściwie ma to więcej wspólnego z tym, czy właściwość jest typem wartości, czy typem odniesienia. Również przy porównywaniu typów odniesienia, w większości przypadków porównanie będzie dotyczyło tego, czy wskazują one na ten sam obiekt, ale możliwe jest przesłonięcie metod lub utworzenie operatorów, tak aby porównanie zostało wykonane na obiektach (ponownie tak jak w przypadku obiektów). Jaroslav Jandek już wskazał).
HTH
Jaki jest powód porównywania obiektów DirectoryInfo? Może powinieneś porównać .FullPath? – griZZZly8
To nie są te same ścieżki. Czy to jakiś test Stroopa? –
Również twoje klamry są komentowane. Jeśli chcesz, abyśmy włożyli energię, aby ci pomóc, czy nie wkładasz energii w zadawanie dobrych pytań? –