| @@ -10,11 +10,13 @@ namespace Discord | |||||
| public static IEqualityComparer<IGuild> GuildComparer => _guildComparer ?? (_guildComparer = new EntityEqualityComparer<IGuild, ulong>()); | public static IEqualityComparer<IGuild> GuildComparer => _guildComparer ?? (_guildComparer = new EntityEqualityComparer<IGuild, ulong>()); | ||||
| public static IEqualityComparer<IChannel> ChannelComparer => _channelComparer ?? (_channelComparer = new EntityEqualityComparer<IChannel, ulong>()); | public static IEqualityComparer<IChannel> ChannelComparer => _channelComparer ?? (_channelComparer = new EntityEqualityComparer<IChannel, ulong>()); | ||||
| public static IEqualityComparer<IRole> RoleComparer => _roleComparer ?? (_roleComparer = new EntityEqualityComparer<IRole, ulong>()); | public static IEqualityComparer<IRole> RoleComparer => _roleComparer ?? (_roleComparer = new EntityEqualityComparer<IRole, ulong>()); | ||||
| public static IEqualityComparer<IMessage> MessageComparer => _messageComparer ?? (_messageComparer = new MessageEqualityComparer()); | |||||
| private static IEqualityComparer<IUser> _userComparer; | private static IEqualityComparer<IUser> _userComparer; | ||||
| private static IEqualityComparer<IGuild> _guildComparer; | private static IEqualityComparer<IGuild> _guildComparer; | ||||
| private static IEqualityComparer<IChannel> _channelComparer; | private static IEqualityComparer<IChannel> _channelComparer; | ||||
| private static IEqualityComparer<IRole> _roleComparer; | private static IEqualityComparer<IRole> _roleComparer; | ||||
| private static IEqualityComparer<IMessage> _messageComparer; | |||||
| private sealed class EntityEqualityComparer<TEntity, TId> : EqualityComparer<TEntity> | private sealed class EntityEqualityComparer<TEntity, TId> : EqualityComparer<TEntity> | ||||
| where TEntity : IEntity<TId> | where TEntity : IEntity<TId> | ||||
| @@ -39,5 +41,27 @@ namespace Discord | |||||
| return obj?.Id.GetHashCode() ?? 0; | return obj?.Id.GetHashCode() ?? 0; | ||||
| } | } | ||||
| } | } | ||||
| private sealed class MessageEqualityComparer : EqualityComparer<IMessage> | |||||
| { | |||||
| public override bool Equals(IMessage x, IMessage y) | |||||
| { | |||||
| bool xNull = x == null; | |||||
| bool yNull = y == null; | |||||
| if (xNull && yNull) | |||||
| return true; | |||||
| if (xNull ^ yNull) | |||||
| return false; | |||||
| return x.Channel.Id.Equals(y.Channel.Id) && x.Id.Equals(y.Id); | |||||
| } | |||||
| public override int GetHashCode(IMessage obj) | |||||
| { | |||||
| return obj?.Id.GetHashCode() ?? 0; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| } | } | ||||