1

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

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

现在我需要能够比较两个实体,但我不能依赖 and 的默认实现,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>与实际类型不匹配!做什么?

4

1 回答 1

2

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

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

public override bool Equals(object other) {
    return Equals(other as IEntity<TIdentity>);
}
于 2014-09-24T09:49:00.353 回答