Я считаю, что вы хотите это сделать:
var dirUserSelected = new DirectoryInfo(Path.GetDirectoryName(@"c:\some\path\"));
var dirWorkingFolder = new DirectoryInfo(Path.GetDirectoryName(@"c:\Some\PATH"));
if (dirUserSelected.FullName == dirWorkingFolder.FullName )
{ // this will be skipped,
// since the first string contains an ending "\" and the other doesn't
// and the casing in the second differs from the first
}
// to be sure all things are equal;
// either build string like this (or strip last char if its a separator)
// and compare without considering casing (or ToLower when constructing)
var strA = Path.Combine(dirUserSelected.Parent, dirUserSelected.Name);
var strB = Path.Combine(dirWorkingFolder.Parent, dirWorkingFolder.Name);
if (strA.Equals(strB, StringComparison.CurrentCultureIgnoreCase)
{ //this will not be skipped
}
............
В вашем примере вы сравниваете 2 разных объекта, поэтому они не равны. Я считаю, что вам нужно сравнить пути, поэтому используйте приведенный выше код.
Как говорит Ярослав Яндек (извините, что не могу комментировать, недостаточно репутации)
Потому что он сравнивает эти два экземпляры, а не их значение (две ссылки).
И на самом деле это то же самое для множества других случаев! Например
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 является "long", поэтому вы сравниваете два типа значений. Обратите внимание, что "ip1.ToString() == ip2.ToString()" также будет истинным, даже если строка - это ссылочный тип, а не тип значения (но строки - это действительно специальные типы).
Итак, действительно, в вашем случае вы хотите сравнить свойство FullName (это строка, так что нет проблем).
Вы говорите, что
Только при использовании свойств, т.е. свойства .FullName, вы сравниваете значение, а не экземпляр?
На самом деле это имеет отношение к тому, является ли свойство типом значения или типом ссылки. Также при сравнении ссылочных типов в большинстве случаев сравнивается, указывают ли они на один и тот же объект, но можно переопределить методы или создать операторы так, чтобы сравнение производилось по содержимому объектов (опять же, как уже указал Ярослав Яндек).
HTH
Потому что сравниваются эти два экземпляра, а не их значение (две ссылки).
Я выполнил поиск в Google по запросу "равенство DirectoryInfo" и нашел несколько отличных результатов, в том числе один на StackOverflow ( Как проверить, указывают ли 2 объекта DirectoryInfo на один и тот же каталог? ])
Если два Directory.FullName
совпадают, то вы знаете, что они одинаковы, но если они не совпадают, вы все равно мало что знаете. Существуют короткие имена, ссылки и перекрестки, а также множество других причин, по которым две разные строки могут относиться к одному и тому же месту на диске.
Если вы рассчитываете точно знать, что две строки не находятся в одном и том же месте и безопасность находится под угрозой, вы, вероятно, создаете ошибку безопасности. Действуйте осторожно.