简单的IEqualityComparer <T>问题

duc*_*zle 8 c#

我正在尝试从包含通用对象的列表中删除重复的条目.

public class MessageInfo
{
    public DateTime Date { get; set; }
    public string To { get; set; }
    public string Message { get; set; }
}

public class SMSDupeRemover : IEqualityComparer<MessageInfo>
{
    public bool Equals(MessageInfo x, MessageInfo y)
    {
        throw new NotImplementedException();
    }

    public int GetHashCode(MessageInfo obj)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

以及删除欺骗的代码:

IEnumerable<MessageInfo> new_texts = text_messages.Distinct(new SMSDupeRemover());
Run Code Online (Sandbox Code Playgroud)

问题是Equals和从不调用GetHashCode.任何人都知道为什么?

And*_*rey 12

因为Distinct很懒.最后尝试添加ToList().

更长的答案.Linq操作实际上是声明性操作.它们定义查询,但它们不会告诉它执行它.IEnumerable<T>不包含数据,只包含查询定义.你构建了查询,好吧,如何获取数据?

  • foreach这个IEnumerable.由于foreach必须检索所有数据(查询执行).
  • 致电ToList/ ToDictionary.这些集合存储真实数据,因此为了填充它们,系统必须执行查询.