Linq except 如何比较结果

2024-01-04

except 如何判断两个值是否相同

我有以下代码

var removes = collection.Except(values, comparer).ToList();
var adds = values.Except( collection, comparer).ToList();
foreach (var item in removes)
{
    collection.Remove(item);
}
foreach (var item in adds)
{
    collection.Add(item);
}

然而,比较器认为相等的项目包含在 except 列表中,因此为了查看发生了什么,我在 Equals 函数中放置了一个断点,并且它没有被调用,只有 GetHashCode() 函数

那么使用什么标准来比较项目,是否只有当哈希值不同时才调用相等函数?

编辑: 比较器类和被比较类是

public class Lookup
{
    public static readonly IEqualityComparer<Lookup> DefaultComparer = new EqualityComparer();
    private class EqualityComparer : IEqualityComparer<Lookup>
    {
        public bool Equals(Lookup x, Lookup y)
        {
            if (x == null)
                return y == null;
            else if (y == null)
                return false;
            else
                return x.ID == y.ID
                    && x.Category == y.Category
                    && x.DisplayText == y.DisplayText
                    && MetaData.CollectionComparer.Equals(x.MetaData, y.MetaData);
        }

        public int GetHashCode(Lookup obj)
        {
            var rtn = new { obj.ID, obj.Category, obj.DisplayText, obj.MetaData }.GetHashCode();

            return rtn;
        }
    }
    [DataMember]
    public int ID { get; set; }
    [DataMember]
    public LookupType Category { get; set; }
    [DataMember]
    public string DisplayText { get; set; }
    [DataMember]
    public MetaData[] MetaData { get; set; }
}

难道只有当哈希值不同时才会调用相等函数吗?

是的,就是这样。这是出于性能原因(假设GetHashCode实施应该总是比Equals执行)。

如果两个对象有不同的哈希码,它们肯定不会是same or equal对象,所以不需要调用Equals。只要哈希码相同,Equals被调用以查看它们是否真的相等或只是偶然具有相同的哈希码。

So your GetHashCode实施应始终确保equal对象具有相同的哈希码。

自从您实施以来GetHashCode创建匿名类型的实例并调用GetHashCode在这种情况下,哈希码将始终不同,因此所有对象都彼此不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linq except 如何比较结果 的相关文章

随机推荐

  • 如何从具有或不具有背景大小的文件夹创建精灵(使用指南针)

    我想将指南针生成的图标精灵用于两种不同的场景 使用原始大小的图标 使用 CSS3 属性使用与较小版本相同的图标background size 我首先这样做 logo spacing 20px import logo png include
  • NHibernate;删除子项也会删除父项吗?

    为什么是当我删除子级 员工 时 父级 商店 也被删除 我配置为约定 Cascade All The 用户输入序列很简单 从空数据库开始 添加家长 保存 加载 加载 重新加载完整对象图 添加一个孩子 保存 加载 删除子项 结果 数据库为空 父
  • Spotify 自动播放列表管理与 PHP 后端和速率限制

    两个问题 问题1 我们需要从我们的后端 PHP 管理 Spotify 用户的 4 个播放列表 无需用户登录 我们网站的访问者可以向我们的网站提交多首他们喜欢的歌曲 在此基础上 我们创建并管理 4 个播放列表 其中包含 提交最多的歌曲 我们希
  • 如何显示用户时区的时间

    我使用的是rails 3 0 5 并且已将created at 和updated at 存储在UTC 中 现在我想显示用户时区中的created at时间 我相信可以从浏览器中选择用户的时区 然后将时间转换为用户的时区 我确信 Rails
  • 使用 NPOI 将图像添加到 Word docx 文件

    我开始使用 NPOI 创建 Word 文档 并且尝试将简单的图像添加到文档中 但它没有显示 不过我可以让文字显示得很好 这是我的代码 var wDoc new XWPFDocument var bytes File ReadAllBytes
  • Android TV 中缺少应用栏的替代方案

    我只是注意到我的 Android 应用程序 当我运行它时 Android TV 带有后倾意图 但事实并非如此 显示菜单项的三明治按钮 This is missing and everthing else like the title 建议的
  • LINQ to XML 分组依据

    我想使用 LINQ 通过在 Summary 字段上执行 GROUPBY 并对 Balance 字段求和来将输入 XML 转换为输出 XML 输入 XML
  • Spring 3+ 当 JUnit 无法识别时如何创建 TestSuite

    我正在使用 Spring 3 0 4 和 JUnit 4 5 我的测试类当前使用 Spring 的注释测试支持 语法如下 RunWith SpringJUnit4ClassRunner class ContextConfiguration
  • 获得更干净的斑点以进行计数

    仍在学习图像遮蔽的旅程中 我正在尝试计算图像中红点的数量 Here is the input image After masking red I get this image 问题是 某些斑点未满 因此它不会计算所有斑点 例如在此特定图像中
  • 我可以记住 Python 生成器吗?

    我有一个函数叫做runquery它调用数据库 然后逐行生成行 我写了一个 memoize 装饰器 或者更准确地说 我只是从这个计算器问题 https stackoverflow com questions 3377258 memoizati
  • 分离本地数据库.mdf,复制,附加新文件

    我尝试分离本地数据库 mdf 将其复制到另一个文件夹中 并在启动时附加新文件 并在关闭时复制到旧文件夹 它似乎在启动时有效 但在表单关闭时出现错误 该进程无法访问文件 C ProgramData MyData db1 mdf 因为它正在被另
  • 将现有查询添加到报告中

    我的报告计算了我商店中的墨水库存 我在VB NET中构建了一条SQL语句并得到了正确的结果 如何在 Crystal Report 中显示这些结果 或者设计一个报告以检索相同的结果 我尝试使用 SQL 表达式生成器但失败了 通常您将使用以下方
  • 在 IE 中测试 console.log 语句[重复]

    这个问题在这里已经有答案了 可能的重复 对于 Internet Explorer 控制台 是未定义的错误 https stackoverflow com questions 3326650 console is undefined erro
  • mod_fcgid 进程和 XCache 生命周期

    我使用 mod fcgid 和 Xcache 3 0 3 PHP 5 4 18 我知道由于 mod fcgid 设计 我无法使用公共共享内存 因此每个 php cgi 进程在其生命周期内都使用自己的缓存 当我打开时top并检查php cgi
  • R:向非 ggplot 对象添加轴标题

    我正在使用 R 编程语言 通常 当我制作绘图时 我使用 ggplot2 库 并且 aes 选项可用于标记 x 轴并添加标题 然而这一次 我制作的图不是 ggplot2 对象 因此不能以相同的方式进行标记 library MASS libra
  • Sequelize 如何比较查询中日期的年份

    我正在尝试进行以下查询 SELECT FROM TABLEA AS A WHERE YEAR A dateField 2016 我如何以续集风格执行上面的查询 TABLEA findAll where Thanks TABLEA findA
  • C# 中的类型推断

    我知道 msdn 可能应该是第一个去的地方 并且会在我在这里获得独家新闻之后 msdn 不会真正提供的技术规范的一部分是我现在要问的 该主题在日常开发过程中究竟有何用处 它与 clr 内的匿名类型是否有任何形状或形式的相关性 它允许做什么
  • 跟踪 Firestore 流量/请求

    为了最大限度地减少不必要的操作 最好查看对服务器的实际请求 使用firebase实时数据库很容易做到 因为它打开了websocket并且可以在chrome开发工具中查看 Firestore 似乎有所不同 目前尚不清楚它使用什么类型的与服务器
  • 表中单元格的条件着色

    我正在尝试创建一个数据表 其单元格根据单元格中的值具有不同的颜色 我可以用这个功能来实现addtable2plot来自plotrix包裹 这addtable2plot函数在已有的绘图上放置一个表格 该解决方案的问题是我不需要绘图 只需要表格
  • Linq except 如何比较结果

    except 如何判断两个值是否相同 我有以下代码 var removes collection Except values comparer ToList var adds values Except collection compare