IEqualityComparer that uses ReferenceEquals

后端 未结 5 1987
野趣味
野趣味 2020-11-28 09:33

Is there a default IEqualityComparer implementation that uses ReferenceEquals?

EqualityComparer.Default uses

5条回答
  •  情深已故
    2020-11-28 10:08

    Here's a simple implementation for C# 6 and later:

    public sealed class ReferenceEqualityComparer : IEqualityComparer, IEqualityComparer
    {
        public static ReferenceEqualityComparer Default { get; } = new ReferenceEqualityComparer();
    
        public new bool Equals(object x, object y) => ReferenceEquals(x, y);
        public int GetHashCode(object obj) => RuntimeHelpers.GetHashCode(obj);
    }
    
    

    Or a generic version:

    public sealed class ReferenceEqualityComparer : IEqualityComparer
    {
        public static IEqualityComparer Default { get; } = new ReferenceEqualityComparer();
    
        public bool Equals(T x, T y) => ReferenceEquals(x, y);
        public int GetHashCode(T obj) => RuntimeHelpers.GetHashCode(obj);
    }
    

    提交回复
    热议问题