Рейтинг:
12
OriginalGriff
Я бы сделал это так, чтобы использовать Distinct с компаратором:
public class MyClass
{
public string Name { get; set; }
public string Other { get; set; }
public MyClass(string a, string b)
{
Name = a; Other = b;
}
}
public class MyClassComp : IEqualityComparer<MyClass>
{
public bool Equals(MyClass x, MyClass y)
{
return x.Name == y.Name && x.Other == y.Other;
}
public int GetHashCode(MyClass obj)
{
if (Object.ReferenceEquals(obj, null)) return 0;
int hashName = obj.Name == null ? 0 : obj.Name.GetHashCode();
int hashOther = obj.Other == null ? 0 : obj.Other.GetHashCode();
return hashName ^ hashOther;
}
}
Затем я могу использовать это, чтобы сделать то, что вы хотите:
List<MyClass> list = new List<MyClass>();
list.Add(new MyClass("A", "A"));
list.Add(new MyClass("A", "A"));
list.Add(new MyClass("A", "B"));
list.Add(new MyClass("A", "C"));
list.Add(new MyClass("B", "A"));
list.Add(new MyClass("B", "A"));
list.Add(new MyClass("B", "B"));
list.Add(new MyClass("B", "B"));
List<MyClass> newList = list.Distinct(new MyClassComp()).ToList();
BernardBouree
Спасибо, что это работает!
А что, если я хочу иметь список дубликатов?
OriginalGriff
Вот где .Кроме как входит ... :смеяться:
BernardBouree
Ну, я не знаю, что происходит, но это больше не работает.
Вот как я реализовал свой класс сравнения
публичный класс ToponymeGeoDbComp : IEqualityComparer<toponymegeodb>
{
public bool Equals(ToponymeGeoDb x, ToponymeGeoDb y)
{
возвращенная строка.Равняется (X. город.Отделка(), г.Города.Trim (), StringComparison.CurrentCultureIgnoreCase)
&ампер;&ампер; стринги.Равно (x. страна.Отделка(), г.Страны.Trim (), StringComparison.CurrentCultureIgnoreCase);
}
public int GetHashCode(ToponymeGeoDb obj)
{
if (ReferenceEquals(obj, null)) возвращает 0;
var hashCodeCity = obj.Город = = ноль ? 0: ОБЖ. город.GetHashCode();
var hashCodeCountry = obj.Страна = = ноль ? 0: Обь.Страна.GetHashCode();
вернуться hashCodeCity ^ hashCodeCountry;
}
}
И я называю это с помощью
ToponymeGeoDb.ListeToponymesGeoDB = ToponymeGeoDb.ListeToponymesGeoDB.Отдельные(новые ToponymeGeoDbComp()).Список();
Где ListeToponymesGeob объявлен статическим в моем классе ToponymeGeoDb.
Когда я пытаюсь проследить, я обнаруживаю, что метод Equals никогда не вызывается .
Благодарим Вас за помощь.
OriginalGriff
Это делает для меня - скопируйте и вставьте мой код, и вы увидите, - поэтому вам нужно начать с просмотра определения и содержания ListeToponymesGeoDB непосредственно перед тем, как будет сделан ваш отдельный вызов.