using System.Collections.Generic;
public int Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
if (obj == null || GetType() != obj.GetType())
ItemDTO other = (ItemDTO)obj;
return Id == other.Id && Name == other.Name;
public override int GetHashCode()
return Id.GetHashCode() ^ Name.GetHashCode();
static void Main(string[] args)
HashSet<ItemDTO> items = new HashSet<ItemDTO>();
items.Add(new ItemDTO { Id = 1, Name = "Item1" });
items.Add(new ItemDTO { Id = 2, Name = "Item2" });
items.Add(new ItemDTO { Id = 3, Name = "Item3" });
items.Add(new ItemDTO { Id = 4, Name = "Item4" });
items.Add(new ItemDTO { Id = 5, Name = "Item5" });
items.Add(new ItemDTO { Id = 1, Name = "Item1" });
Console.WriteLine("Elements in the HashSet:");
foreach (var item in items)
Console.WriteLine($"Id: {item.Id}, Name: {item.Name}");
var searchItem = new ItemDTO { Id = 3, Name = "Item3" };
if (items.Contains(searchItem))
Console.WriteLine($"HashSet contains the item with Id {searchItem.Id} and Name {searchItem.Name}");
Console.WriteLine($"HashSet does not contain the item with Id {searchItem.Id} and Name {searchItem.Name}");
var deleteItem = new ItemDTO { Id = 4, Name = "Item4" };
if (items.Remove(deleteItem))
Console.WriteLine($"Item with Id {deleteItem.Id} and Name {deleteItem.Name} was removed from the HashSet");
Console.WriteLine($"Item with Id {deleteItem.Id} and Name {deleteItem.Name} was not found in the HashSet");
Console.WriteLine("Elements in the HashSet after deletion:");
foreach (var item in items)
Console.WriteLine($"Id: {item.Id}, Name: {item.Name}");