簡體   English   中英

檢查List Contains()實體項

[英]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類型覆蓋EqualsGetHashCode

這是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;
  }
}

注意:將Value1Value2替換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM