我正在尝试从包含通用对象的列表中删除重复的条目.
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.这些集合存储真实数据,因此为了填充它们,系统必须执行查询.| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |