比较 C# 中的两个 List<MyClass>
Posted
技术标签:
【中文标题】比较 C# 中的两个 List<MyClass>【英文标题】:Comparing two List<MyClass> in C# 【发布时间】:2010-03-11 20:18:45 【问题描述】:我有一门课叫
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; //???
【问题讨论】:
【参考方案1】:试试下面的
ListA.SequenceEquals(ListB);
SequenceEquals 是Enumerable
类上可用的扩展方法。在 System.Linq 附带的 C# 3.5 项目中默认提供此功能
【讨论】:
【参考方案2】:Enumerable.SequenceEqual
【讨论】:
【参考方案3】:要回答你的问题,不,你不应该是真的。 List
和 List<T>
没有定义 .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。
【讨论】:
以上是关于比较 C# 中的两个 List<MyClass>的主要内容,如果未能解决你的问题,请参考以下文章
比较两个 struct List 并查找 list1 的项目是不是出现在 C# 中的 list2 项目中