C#, Отличный на IEnumerable <T> с пользовательским IEqualityComparer

52
задан Fueled 27 June 2011 в 03:23
поделиться

3 ответа

Проблема с Вашим GetHashCode. Необходимо изменить его для возврата хэш-кода AllianceName вместо этого.

int IEqualityComparer<Village>.GetHashCode(Village obj)
{
    return obj.AllianceName.GetHashCode();
}

вещь, если Equals возвраты true, объекты должны иметь тот же хэш-код, который не имеет место для различного Village объекты с тем же AllianceName. С тех пор Distinct работы путем создания хеш-таблицы внутренне, Вы закончите с равными объектами, которые не будут подобраны вообще из-за различных хэш-кодов.

Точно так же для сравнения двух файлов, если хеш двух файлов не является тем же, Вы не должны проверять сами файлы вообще. Они будут отличаться. Иначе Вы продолжите проверять, чтобы видеть, являются ли они действительно тем же или нет. Это точно, что хеш-таблица, которая Distinct использование ведет себя.

72
ответ дан Mehrdad Afshari 7 November 2019 в 09:24
поделиться

Или измените строку

return alliances.Distinct(new AllianceComparer());

на

return alliances.Select(v => v.AllianceName).Distinct();
6
ответ дан 7 November 2019 в 09:24
поделиться

return alliances.Select (v => v.AllianceName) .Distinct ();

Это вернет IEnumerable вместо IEnumerable .

11
ответ дан 7 November 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: