【问题标题】:Comparing two List<MyClass> in C#比较 C# 中的两个 List<MyClass>
【发布时间】:2023-03-07 10:25:01
【问题描述】:

我有一门课叫

MyClass

这个类继承了 IEquatable 并以我需要的方式实现。 (意思是:当我在代码中单独比较两个 MyClass 类型对象时,它可以工作)

然后我创建两个列表:

var ListA = new List<MyClass>();
var ListB = new List<MyClass>();
// Add distinct objects that are equal to one another to 
// ListA and ListB in such a way that they are not added in the same order.

当我去比较 ListA 和 ListB 时,我应该得到 true 吗?

ListA.Equals(ListB)==true; //???

【问题讨论】:

    标签: c# .net list iequatable iequalitycomparer


    【解决方案1】:

    试试下面的

    ListA.SequenceEquals(ListB);
    

    SequenceEquals 是Enumerable 类上可用的扩展方法。在 System.Linq 附带的 C# 3.5 项目中默认提供此功能

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        要回答你的问题,不,你不应该是真的。 ListList&lt;T&gt; 没有定义 .Equals,因此它们继承了 Object.Equals,它检查以下内容:

        public static bool Equals(object objA, object objB)
        {
            return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
        }
        

        objA.Equals(objB) 是虚拟的。如果我没记错的话,默认实现只是检查引用是否相等(指向内存中的同一对象),因此您的代码将返回 false。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-11
          • 1970-01-01
          • 1970-01-01
          • 2011-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-08
          相关资源
          最近更新 更多