[英]Check if List Contains() entity item
我有一個實體列表。 該實體有兩個整數變量。 我正在嘗試檢查列表是否包含該身份,但它始終返回false。
基本上我想檢查列表是否在任何第二個索引中包含X。
List<Entity.Limit> list = new List<Entity.Limit>();
list.Add(new Entity.Limit(1, 2));
list.Add(new Entity.Limit(1, 3));
list.Add(new Entity.Limit(1, 4));
Response.Write(list.Contains(new Entity.Limit(1, 2))); //Returns False
這里的問題是,當您真正想要基於價值的平等時,您正在使用基於引用的平等。 為了獲得值相等性,您需要將IEqualityComparer<T>
傳遞給Contains
相等性的Contains
擴展方法,或者為Equality.Limit
類型覆蓋Equals
和GetHashCode
。
這是IEqualityComparer<Entity.Limit>
實現的示例
public sealed class EntityEqualityComparer : IEqualityComparer<Entity.Limit> {
public bool Equals(Entity.Limit left, Entity.Limit right) {
return
left.Value1 == right.Value1 &&
left.Value2 == right.Value2;
}
public int GetHashCode(Entity.Limit left) {
return left.Value1 ^ left.Value2;
}
}
注意:將Value1
和Value2
替換為2個值的適當屬性名稱。
using System.Linq;
...
bool contains = list.Contains(
new Entity.Limit(1, 2),
new EntityEqualityComparer());
讓Entity.Limit
覆蓋Object.Equals
。 現在,它正在比較參考,因此不匹配任何參考。 所以:
class Limit {
// ...
public override bool Equals(object obj) {
Limit l = obj as Limit;
if(l != null) {
// Compare the two and return true if they are equal
}
return false;
}
}
然后Contains()
將能夠正確比較您的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.