Я хочу получить только отличные от HashSet
, я реализовал IEquatable
, IEqualityComparer
, но все еще не могу получить отличные значения. ВыходПолучите отличные от HashSet
class Program
{
static void Main(string[] args)
{
HashSet<Item> items = new HashSet<Item>()
{
{new Item("item1")},
{new Item("item2")},
{new Item("item3")},
{new Item("item1")}
};
foreach (var item in items.Distinct())
{
Console.WriteLine(item.Name);
}
Console.ReadKey();
}
}
class Item : IEquatable<Item>, IEqualityComparer<Item>
{
public string Name { get; set; }
public Item(string name)
{
this.Name = name;
}
public bool Equals(Item other)
{
return this.Name.Equals(other.Name);
}
public bool Equals(Item x, Item y)
{
return x.Equals(y);
}
public int GetHashCode(Item obj)
{
return this.Name.GetHashCode();
}
}
консоли:
item1
item2
item3
item1
Спасибо!
Что касается «Equals (arg1, arg2)), им нужно« переопределить »ключевое слово? –
@ MatjažMav No. Вам не нужно «Equals (arg1, arg2)» вообще. Вы в порядке с реализацией 'IEquatable', не нужно для 'IEqualityComparer '. –
C# автоматически добавил эти два метода в мой код. –