因此,我为实体提供了一个接口,它要求实体公开自己的身份。
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>提供的方法上的参数类型与实际类型不匹配!做什么?
发布于 2014-09-24 09:49:00
应该管用的。Equals(IEntity<TIdentity>)应优先于Equals(object)
无论如何,您应该重写Equals(object):
public override bool Equals(object other) {
return Equals(other as IEntity<TIdentity>);
}https://stackoverflow.com/questions/26013320
复制相似问题