C# 如何比较c中的两个对象列表

C# 如何比较c中的两个对象列表,c#,linq,C#,Linq,如您所见,lst1和lst2都是ClassA项的列表。列表相等的一般定义是,如果第一个列表中的每个项目等于第二个列表中的相应项目,则列表相等。我指的是具有相同索引的项目 但是,我不希望对类A的对象进行普通的相等比较,我希望指定特定的相等比较程序 如果属性var2/var3/VAR4的值相等,则认为ClassB的两个对象相等。 如果属性类型具有相同的值,并且两个ClassA对象的属性lst1都是可枚举的,则ClassA的两个对象相等。SequenceEqual 我假设这必须通过为这些类实现IEqu

如您所见,lst1和lst2都是ClassA项的列表。列表相等的一般定义是,如果第一个列表中的每个项目等于第二个列表中的相应项目,则列表相等。我指的是具有相同索引的项目

但是,我不希望对类A的对象进行普通的相等比较,我希望指定特定的相等比较程序

如果属性var2/var3/VAR4的值相等,则认为ClassB的两个对象相等。 如果属性类型具有相同的值,并且两个ClassA对象的属性lst1都是可枚举的,则ClassA的两个对象相等。SequenceEqual
我假设这必须通过为这些类实现IEquality来完成,或者可能创建一个EqualityComparer,并为我的lst1和lst2使用SequenceEqual,哪两个列表?var1的内容是什么?一个整数值?以逗号分隔的整数列表?ClassA和你的问题有什么关系?你尝试过什么?这将是一个过去的案例…看这个:和其他一些帖子…@HaraldDutch请让OP思考一下。不要重写他的帖子来反映你认为的问题。步骤1创建一个类,实现并执行你想要的这个案例的完全相等比较。第二步:如果!lst1.sequenceequalslt2,instanceofthequalitycomparer{/*not sequenceequal*/}如果A然后返回true,则返回false,而不是编码:返回A不是更好吗?
var firstNotSecond = lst1.Except(lst2).ToList();
var secondNotFirst = lst2.Except(lst1).ToList();

if ((firstNotSecond.Count > 0) || (secondNotFirst.Count > 0))
{
    // not equal result = false;
}
var firstNotSecond = lst1.Except(lst2).ToList();
var secondNotFirst = lst2.Except(lst1).ToList();

if ((firstNotSecond.Count > 0) || (secondNotFirst.Count > 0))
{
    // not equal result = false;
}
    public class ClassBEqualityComparer : IEqualityComparer<ClassB>
        {
            public bool Equals(ClassB x, ClassB y)
            {

              if((x.var2.Equals(y.var2)) && (x.var3.SequenceEqual(y.var3)) && (x.var4.SequenceEqual(y.var4)))
              {
                return true;
              }
              else
              {
                return false;
              }       
            }
            public int GetHashCode(ClassB x)
            {

            }
        }



public class ClassAEqualityComparer : IEqualityComparer<ClassA>
{
    public bool Equals(ClassA x, ClassA y)
    {
      ClassBEqualityComparer ClassBEqC = new ClassBEqualityComparer();
      if((x.Type == y.Type) && (x.lst1.SequenceEqual(y.lst1,ClassBEqC)))
      {
        return true;
      }
      else
      {
        return false;
      }        

    }
    public int GetHashCode(ClassA x)
    {

    }
}   



    ClassAEqualityComparer ClassAEqC = new ClassAEqualityComparer();
    bool result = lst1.SequenceEqual(lst2, ClassAEqC);