我有一個PagedModel類,它實現IEnumerable只返回ModelData,忽略分頁數據。我還重寫了Equals和GetHashCode,以允許通過它們的ModelData,PageNumber和TotalPages以及PageSize來比較兩個PagedModel對象。Assert.AreEqual不會在IEnumerable實現中使用我的.Equals覆蓋
這裏的問題
Dim p1 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
Dim p2 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
p1.Equals(p2) =====> True
Assert.AreEqual(p1, p2) ======> False!
它看起來像NUnit的是調用它的內部EnumerableEqual方法比較我PagedModel的,而不是使用equals我提供的方法!有什麼方法可以覆蓋這種行爲,或者我必須編寫自定義斷言。
這個答案的意思是說,本質上在你的實現中,你需要明確地實現IEquatable .Equals ...參見http://stackoverflow.com/questions/1577149/explicit-interface-implementation-in-vb-net –
Jay
不,實施IEquatable是不夠的。 GetHashCode實現同樣重要。如果你沒有實現IEquatable (請參閱我的文章中的引用),那麼瞭解IEnumerable會回落到使用Equals(object),這一點也很重要,所以這不是絕對必需的。 –
csauve
我說明確實現IEquatable.Equals不應該允許默認回退,因爲該方法將覆蓋,並顯式實現將調用該方法... – Jay