using System; using System.Collections.Generic; namespace Discord { /// /// Represents a collection of for various Discord objects. /// public static class DiscordComparers { /// /// Gets an to be used to compare users. /// public static IEqualityComparer UserComparer { get; } = new EntityEqualityComparer(); /// /// Gets an to be used to compare guilds. /// public static IEqualityComparer GuildComparer { get; } = new EntityEqualityComparer(); /// /// Gets an to be used to compare channels. /// public static IEqualityComparer ChannelComparer { get; } = new EntityEqualityComparer(); /// /// Gets an to be used to compare roles. /// public static IEqualityComparer RoleComparer { get; } = new EntityEqualityComparer(); /// /// Gets an to be used to compare messages. /// public static IEqualityComparer MessageComparer { get; } = new EntityEqualityComparer(); private sealed class EntityEqualityComparer : EqualityComparer where TEntity : IEntity where TId : IEquatable { public override bool Equals(TEntity x, TEntity y) { return (x, y) switch { (null, null) => true, (null, _) => false, (_, null) => false, _ => x.Id.Equals(y.Id) }; } public override int GetHashCode(TEntity obj) { return obj?.Id.GetHashCode() ?? 0; } } } }