首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >界面上的IEquatable<'1>

界面上的IEquatable<'1>
EN

Stack Overflow用户
提问于 2014-09-24 09:27:52
回答 1查看 590关注 0票数 1

因此,我为实体提供了一个接口,它要求实体公开自己的身份。

代码语言:javascript
复制
public interface IEntity<TIdentity> {
    public TIdentity Id { get; } 
}

现在我需要能够比较彼此之间的两个实体,但是我不能依赖EqualsGetHashCode的默认实现,因为应该根据实体的身份来比较实体,而不是整体签名。由于实现IEntity<'1>的每个类都应该是可比较的,所以我考虑直接在实体接口上声明IEquatable<'1>

好吧..。那不管用。当我在IEquatable<'1>上声明IEntity<'1>时,接口强制实现类来实现以下内容:

代码语言:javascript
复制
public bool Equals(IEntity<'1> other)

而不是

代码语言:javascript
复制
public bool Equals(TypeImplementingIEntity other)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-24 09:49:00

应该管用的。Equals(IEntity<TIdentity>)应优先于Equals(object)

无论如何,您应该重写Equals(object)

代码语言:javascript
复制
public override bool Equals(object other) {
    return Equals(other as IEntity<TIdentity>);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26013320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档