问题标签 [iequatable]

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 投票
2 回答
2853 浏览

c# - 在基类中实现 IEquatable

我首先使用带有 EntityFramework 代码的 ASP.NET MVC。

我正在尝试为将保存到我的数据库中的所有对象(这里称为实体类)创建一个基类。

有没有在基类中实现 IEquatable 的好方法?在我的实现中,我检查了类型和 ID - 这是一个好方法吗?这总是会返回最终的派生类型吗?中级父母呢?

对象

数据库

每个派生对象类型通常存在于单独的数据库中。但是,会有一些具有中间继承父级的对象共享主键。

假设有三个具有以下列的表: 实体

  • 内容
    • ID
    • 姓名
    • ID
    • 身体
  • 用户
    • ID
    • 姓名

因此,Page 和 Content 表共享一个主键。

0 投票
2 回答
787 浏览

c# - IEquatable 不调用 Equals 方法

嗯,我正面临 IEquatable (C#) 的问题。正如您在下面的代码中看到的那样,我有一个实现 IEquatable 的类,但它的“Equals”方法无法实现。我的目标是:我的数据库中有一个日期时间列,我只想区分日期,而不考虑“时间”部分。

例如:12-01-2014 23:14 将等于 12-01-2014 18:00。

你知道我怎样才能让它正常工作或做我需要的其他选择吗?谢谢!!

0 投票
9 回答
680 浏览

c# - 在具有通配符 Equatability 的类上实现 GetHashCode

假设我希望能够比较 2 个整数列表并将一个特定值视为通配符。

例如,如果 -1 是通配符,则

{1,2,3,4} == {1,2,-1,4} //returns true

我正在编写一个类来包装所有这些逻辑,因此它实现IEquatable并具有相关逻辑public override bool Equals()

但是我一直认为,GetHashCode如果您覆盖.Equals(). 当然它不是由编译器强制执行的,但我的印象是,如果你不这样做,那么你做错了。

除了我看不到如何在.GetHashCode()不破坏其合同(Equal 的对象具有不同的哈希值)或仅让实现为return 1.

想法?

0 投票
2 回答
4237 浏览

generics - Swift 中符合 Comparable 的泛型类

我正在尝试创建一个符合 Comparable 协议的简单通用节点类,以便我可以轻松比较节点而无需访问它们的密钥。但是,当我尝试编写 < 和 == 函数时,编译器似乎并不喜欢它。< 和 == 函数在定义节点参数时需要一个类型。这在 Java 中很简单,您在类内部定义了相等和 <。斯威夫特在全球范围内要求它。有什么想法吗 ?

例子:

0 投票
3 回答
605 浏览

c# - 实现 IEquatable 时隐藏基类方法

我正在寻找以IEquatable<T>隐式类型检查的方式实现的最佳方法。如果我调用Equals一个子类,我想确保我要比较的类型是相同的。请参阅下面的精简示例。

如果两个Child1对象的 ID 相同,则应将其视为相等。在此示例中,如果它们的 ID 相同,则调用child1.Equals(child2)将返回 true,这不是预期的行为。我基本上想强制实例使用需要参数Child1的重载,而不仅仅是从与.EqualsChild1Child1

我开始认为我以错误的方式处理这个问题。也许我应该把实现留Equals在基类中,并确保this.GetType() == other.GetType()

0 投票
0 回答
47 浏览

c# - 实现方程函数的正确方法是什么

似乎有很多方程接口:IEquatable, IEquatable<T>, IEqualityComparer, IEqualityComparer<T>. 我应该实现哪一个来检测两个对象是否具有相同的值(而我的对象决定了相同值的含义)。

而且我希望这不仅适用于已知相同类型的两个对象,而且适用于其中一个是我已知类型的两个对象,甚至适用于两个对象的集合,即使它们的来源未知,例如IListIEnumerable(都是非泛型类型,所以没有<T>

这样做的正确方法是什么?

0 投票
1 回答
563 浏览

c# - IEquatable<'1> 在接口上

所以,我有一个实体接口,要求他们公开他们的身份

现在我需要能够比较两个实体,但我不能依赖 and 的默认实现,Equals因为GetHashCode实体应该通过它们的身份进行比较,而不是整体签名。由于实现的每个类都IEntity<'1>应该具有可比性,因此我考虑IEquatable<'1>直接在实体接口上声明。

嗯..那行不通。当我IEquatable<'1>IEntity<'1>接口上声明时,强制实现类来实现以下内容:

代替

因此,在调用Equals两个实体时,运行时会返回,Equals(object obj)因为提供的方法上的参数类型IEquatable<'1>与实际类型不匹配!做什么?

0 投票
1 回答
1436 浏览

generics - 在 Swift 中使用 Equatable 将对象作为属性进行比较

AMRoute 类有两个属性,city1 和 city2,类型为 AMCity 类。大量 AMRoute 存储在一个数组 arrayOfRoutes 中。创建新路线时,我首先需要确保两个给定城市不存在任何路线。

我很难翻译这个有效的 Obj-C 代码:

-(void)createRouteFromCity:(AMCity*)city1 toCity:(AMCity*)city2 {

据我了解,我不能像以前在 Obj-C 中那样使用“==”运算符来比较对象。我在搜索主题时发现的示例将我指向泛型:

我不确定如何将其纳入我的案例。我不需要比较数组中的 AMRoute 对象。我需要将存储为 AMRoute、city1 和 city2 的属性的对象作为 AMCity 对象进行比较。

0 投票
0 回答
124 浏览

c# - 使用 Resharper 生成 IEquatable 接口时,我应该注意哪些“陷阱”?

我使用 Resharper 生成了以下代码。我想知道它是否很好,或者是否有我需要修复/注意的问题。

我想知道 m_customTRP 的比较。m_customTRP 是一个 IList,TimeRfPower 也实现了 IEquatable。以下行也是如此....

...使用 TimeRfPower 类的 Equals() 方法比较每个 TimeRfPower?

0 投票
1 回答
279 浏览

c# - 我应该允许不对称等于吗?

我有一个 C# 类型,将其与 int 进行比较是合乎逻辑的。调用这种类型Number

但是,我无法使 Equals 对称,因为我无法更改Int32.Equals(object other). 那么,我是否应该允许不对称相等,如下所示:

或者我应该只在类型匹配以及数值匹配的情况下才允许相等?