using System.Collections.Generic;
public static void Main()
var widgets = new HashSet<Widget>(Widget.NameComparer) {
new Widget { Name = "Test1" },
new Widget { Name = "test1" }
Console.WriteLine(widgets.Count);
private sealed class NameEqualityComparer : IEqualityComparer<Widget>
public bool Equals(Widget x, Widget y)
if (ReferenceEquals(x, y))
if (ReferenceEquals(x, null))
if (ReferenceEquals(y, null))
if (x.GetType() != y.GetType())
return string.Equals(x.Name, y.Name, StringComparison.OrdinalIgnoreCase);
public int GetHashCode(Widget obj)
return (obj.Name != null ? obj.Name.GetHashCode() : 0);
private static readonly IEqualityComparer<Widget> NameComparerInstance = new NameEqualityComparer();
public static IEqualityComparer<Widget> NameComparer
return NameComparerInstance;