HashSet ExceptWith не работает со сложными типами - PullRequest
0 голосов
/ 09 октября 2018

G'day, я пытаюсь найти разницу между данными, которые у меня есть на сервере SQL, и данными, которые я хранил локально.Я храню локальные данные и данные SQL в двух отдельных HashSets.

Теперь я могу подтвердить, что разница между хэш-наборами составляет всего 1 пункт, но когда я запускаю SQLHashSet.ExceptWith(LocalHashSet), это дает мне полный Hashset вместо простоэто одна дополнительная запись.

Я использую этот пользовательский тип:

class Client : IEquatable<Client>
{
    public string ID { get; set; }
    public override int GetHashCode() 
    {
        return StringComparer.InvariantCulture.GetHashCode(this.ID);
    }
    public override bool Equals(object obj)
    {
        return Equals(obj as Client);
    }

    public bool Equals(Client obj)
    {
        return obj != null && StringComparer.InvariantCulture.Equals(ID, obj.ID);
    }
}

Неужели мое понимание того, как ExceptWith работает неправильно, или мне нужно разработать свой собственный способ сравнения списков?

1 Ответ

0 голосов
/ 09 октября 2018

Ваш код должен работать с тем, как вы реализовали IEquatable<Client> и переопределить GetHashCode, поэтому более вероятно, что проблема на самом деле связана с вашими данными.Вы должны убедиться, что данные обрезаются перед загрузкой в ​​HashSet, так как "SomeValue" не будет соответствовать "SomeValue ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...