问题标签 [iequalitycomparer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
213 浏览

iequalitycomparer - 为什么我需要在 IEqualityComparer 接口中使用 GetHashcode()?

我看到 IEqualityComparer 接口有 Equals(obj x, obj y) 和 GetHashcode()。

我完全理解 Equals() 方法,因为我必须说两件事是否相同,但为什么我还需要实现 GetHashCode() 方法?

0 投票
9 回答
2150 浏览

c# - 什么更快 - if 语句或函数调用?

我正在编写一个有趣的程序,每次性能下降对我来说都是非常痛苦的。所以我想知道什么更好 - 做一个额外的“if”语句来减少函数调用的数量,或者避免那些“if”和获得更多的函数调用。该函数是虚方法,它覆盖了 IEqualityComparer 的 Equals 方法,它所做的只是比较两个文件的大小和哈希值。if 语句比较这两个文件的大小。我想你明白了这个逻辑的意义。正如你所看到的,我正在用 C# 编写这个程序。所以也许任何人都可以回答我,因为这不是我第一次想知道该选择什么。谢谢

0 投票
6 回答
9856 浏览

.net - IStructuralEquatable 和 IStructuralComparable 解决了什么问题?

我注意到.NET 4 中添加了这两个接口和几个相关的类。它们对我来说似乎有点多余;我已经阅读了几篇关于它们的博客,但我仍然无法弄清楚它们解决了哪些在 .NET 4 之前很棘手的问题。

IStructuralEquatable和有什么用IStructuralComparable

0 投票
2 回答
852 浏览

c# - 使用反射的比较运算符

我想在运行时使用反射比较两个值。我为此使用了 Comparer.Default.Compare(x,y),但我开始意识到这还不够。假设我想将双精度与单精度进行比较(1.0 == 10)。Comparer.Default 将抛出异常,因为它坚持两个值必须是相同的类型(双精度)。但是,为此存在显式转换,这正是我想要使用的。

那么,为什么我不能只使用 Convert.ChangeType?以 1.25 > 1 (double > integer) 为例。如果我在 1.25 上尝试 Convert.ChangeType(1.25,typeof(int)),我将得到 1,而上面的断言将失败,而实际上 1.25 IS > 1。

那么,有人可以建议一种调用类型定义的显式比较(如果存在)的方法吗?

谢谢。

0 投票
3 回答
36493 浏览

c# - IEqualityComparer中GetHashCode的作用是什么在.NET 中?

我试图了解接口 IEqualityComparer 的 GetHashCode 方法的作用。

以下示例取自 MSDN:

Equals 方法实现不应该足以比较两个 Box 对象吗?这就是我们告诉框架用于比较对象的规则的地方。为什么需要 GetHashCode?

谢谢。

卢西安

0 投票
1 回答
217 浏览

c# - 从数据库中检索“相同”的复杂对象

我在 LINQ to SQL 中有一个名为“Cars”的表,其中包含“Car”对象。

每辆汽车都有一个 EngineID 和一个 ColourID。

我在内存中创建了一个新的本地 Car 对象(尚未提交到数据库)。

我已经编写了一个 IEqualityComparer,它与 .Contains 结合使用效果很好。如果有任何与我创建的汽车“相同”的汽车已经存在,它会告诉我 TRUE/FALSE。

但它返回一个布尔值..

我怎样才能真正得到哪些汽车是相同的..?

例如,我想要类似..

0 投票
3 回答
1609 浏览

c# - 抽象一个 IEqualityComparer 实现或覆盖默认比较器以使用 Distinct 方法

我试图找到一个不同的List<Author>给定一个List<BlogPost>,每个BlogPost都有一个Author属性。我Distinct()在泛型中找到了扩展方法,我正在尝试使用它。首先,让我解释一下我的循环以及我想在哪里使用它,然后我将解释我的类以及我遇到问题的地方。

尝试在这里使用 distinct

根据我在 MSDN 上阅读的内容Distinct()要么使用默认比较器,要么使用传入的比较器。我希望(我显然不知道这是否可行)在一个地方编写一个比较器并能够将它用于我的所有类,因为它们都通过完全相同的相等操作进行比较(比较GUID每个的属性班级)。

我所有的类都继承自BasePage该类:

我实现的 equals 方法BasePage比较了GUID每个唯一的属性。当我打电话Distinct()时,Author它似乎不起作用。有什么办法可以将比较器包装在一个地方并始终能够使用它,而不必编写类似的东西,class AuhorComparer : IEqualityComparer<Auhor>因为我需要为每个类编写相同的东西,每次我想使用Distinct(). 或者我可以以某种方式覆盖默认比较器,这样我就不必传递任何东西了Distinct()

0 投票
3 回答
841 浏览

c# - .net 中的对象比较

从 CLR 的角度来看,IEqualityComparer==您将在IEqualityComparer<T>? 如果是这样,你什么时候会用一个来对抗另一个?

编辑

好的,Hashtable 的实现使用的 IEqaulityComparer 确实是有道理的——当我发布这个问题时,它从我的脑海中溜走了。那么 IEnumerable 的 Linq 的扩展呢?这是否意味着.net 在执行这些扩展方法时会建立一个 Hashtable?

0 投票
2 回答
732 浏览

linq - 具有单个比较类(和接口)的 Linq Distinct

我的应用程序中有几个类,它们都有一个Name我想用作比较基础的属性(Distinct()等)。因为我总是要比较Name,所以我决定提取一个接口 ,ISomeComparedStuff它只是具有Name我所有其他类都实现的属性。我这样设置了一个比较类:

唯一的问题是当我尝试对其进行编码时:

我收到一个演员错误(SomeStuffto ISomeComparedStuff)。有没有办法做到这一点,所以我只需要一个比较类,否则我必须为我的每个类创建一个(即使我总是要比较Name)?

注意:我理解这个问题“标题”需要帮助。任何建议都会很棒。

0 投票
1 回答
159 浏览

.net - 何时在面向 .NET 4.0 的应用中使用 IEqualityComparer

IEqualityComparer除了IEqualityComparer<T>接口之外,在 .NET 4.0 应用程序中实现弱类型化对我有什么好处吗?

另一个角度是我总是可以实现IEqualityComparer<System.Object>以构成一个同样弱类型的场景,并且永远不需要求助于IEqualityComparer新代码。