接口上的IEquatable <'1>

xvdiff

因此,我为实体提供了一个接口,该接口要求实体公开其标识

public interface IEntity<TIdentity> {
    public TIdentity Id { get; } 
}

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

好吧..那行不通。当我IEquatable<'1>IEntity<'1>接口声明,强制实施类以实现以下目的:

public bool Equals(IEntity<'1> other)

代替

public bool Equals(TypeImplementingIEntity other)

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

丹尼斯

它应该工作。Equals(IEntity<TIdentity>)应该优先于Equals(object)

Equals(object)无论如何,您都应该覆盖

public override bool Equals(object other) {
    return Equals(other as IEntity<TIdentity>);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章