C# 简单的IEqualityComparer<;T>;问题
我试图从包含泛型对象的列表中删除重复项C# 简单的IEqualityComparer<;T>;问题,c#,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 E
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();
}
}
public class MessageInfo
{
公共日期时间日期{get;set;}
{get;set;}的公共字符串
公共字符串消息{get;set;}
}
公共类SMSDupeRemover:IEqualityComparer
{
公共bool等于(MessageInfo x,MessageInfo y)
{
抛出新的NotImplementedException();
}
public int GetHashCode(MessageInfo obj)
{
抛出新的NotImplementedException();
}
}
以及删除复制的代码:
IEnumerable<MessageInfo> new_texts = text_messages.Distinct(new SMSDupeRemover());
IEnumerable new_text=text_messages.Distinct(新的SMSDupeRemover());
问题是Equals,并且永远不会调用GetHashCode。有人知道为什么吗?因为
Distinct
是懒惰的。尝试在末尾添加ToList()
更长的回答。Linq操作实际上是声明性的。它们定义查询,但不告诉执行它IEnumerable
不包含数据,只包含查询定义。您已经构建了查询,好的,如何获取数据
的foreach
。由于IEnumerable
是必需的,因此必须检索所有数据(执行查询)foreach
- 调用
/ToList
。这些集合存储真实数据,所以为了填充它们,系统必须执行查询ToDictionary
GetEnumerator
甚至可能调用MoveNext
之前,LINQ不会执行
尝试将
.ToList()
添加到该查询的末尾,它应该立即执行。直到枚举IEnumerable之后,才会调用IEqualityComparer
试一试
我愿意
List<MessageInfo> unique_msgs =
new List(text_messages.Distinct(new SMSDupeRemover()));
List unique\u msgs=
新列表(text_messages.Distinct(新的SMSDupeRemover());
立即呈现新列表。除非你真的需要枚举器来节省内存。ooh,我不知道。非常感谢。很好,我现在明白了。我快疯了。。。非常感谢。
List<MessageInfo> unique_msgs =
new List(text_messages.Distinct(new SMSDupeRemover()));