繁体   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