Как говорит Ярослав Jandek (жаль, что я не могу комментировать, не хватает репутации)
Поскольку он сравнивает эти два экземпляры, а не их значения (два референции).
И на самом деле это то же самое для тонны других случаев! Для экс
IPAddress ip1 = IPAddress.Parse("192.168.0.1");
IPAddress ip2 = IPAddress.Parse("192.168.0.1");
Оба IP-адреса представляют тот же адрес, но у вас есть две различные экземпляры класса IPaddress. Поэтому, конечно, «ip1 == ip2» и «ip1.Equals (ip2)» оба являются ложными, потому что они не указывают на один и тот же объект.
Теперь, если вы отметите «ip1.Address == ip2.Address», результат будет прав как IPAddress.Address «длинный», поэтому вы сравниваете 2 типа значений. Обратите внимание: «ip1.ToString() == ip2.ToString()» также будет истинным, даже если строка является ссылочным типом, а не типом значения (но строки действительно являются специальными).
Так что в вашем случае вы хотите сравнить свойство FullName (это строка, поэтому никаких проблем).
Вы говорите
Является ли это только с помощью свойства, то есть свойство .FullName, что вы сравниваете значение, чем, например?
На самом деле это больше связано с тем, является ли свойство типом значения или ссылочным типом. Кроме того, при сравнении ссылочных типов в большинстве случаев сравнение будет заключаться в том, указывают ли они на один и тот же объект, но можно переопределить методы или создать операторы, чтобы сравнение осуществлялось на контенте объектов (опять же как и Ярослав Яндек уже указал).
HTH
Какая причина сравнения объектов DirectoryInfo? Может быть, вы должны сравнить .FullPath? – griZZZly8
Это не те же самые пути. Это какой-то тест Stroop? –
Кроме того, ваши близкие фигурные скобки закомментированы. Если вы хотите, чтобы мы вложили энергию, чтобы помочь вам, разве вы не вкладываете энергию в вопрос хорошего вопроса? –