2014-09-24 78 views
1

所以,我有一個實體接口,要求他們公開他們的身份IEquatable <'1>在接口

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

現在我需要能夠比較兩個實體,其彼此,但我不能依靠EqualsGetHashCode默認的實現,因爲實體應由其身份,而不是整體的簽名進行比較。由於實現IEntity<'1>的每個類都應該具有可比性,因此我想直接在實體接口上聲明IEquatable<'1>

那麼..不起作用。當我在IEntity<'1>聲明IEquatable<'1>接口強制執行類來實現如下:

public bool Equals(IEntity<'1> other) 

代替

public bool Equals(TypeImplementingIEntity other) 

所以在調用Equals兩個實體,運行時指回Equals(object obj)因爲類型的IEquatable<'1>提供的方法參數與實際類型不匹配!做什麼?

回答

2

它應該工作。 Equals(IEntity<TIdentity>)應該優先於Equals(object)

您應該重寫Equals(object)反正:

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

根據[這](http://stackoverflow.com/questions/371328/why-is-it-important-to- override-gethashcode-when-equals-method-is-overridden),重寫'GetHashCode()'也很重要。 – 2014-10-10 03:20:07

+0

是的,你應該,但這不是這個問題的原因,所以我沒有提到它。 – 2014-10-10 08:05:18