.net LINQ SequenceEqual返回false,但使用Except进行比较会得到不同的结果

lmvvr0a8  于 2023-01-14  发布在  .NET
关注(0)|答案(1)|浏览(75)

我有两个列表,我认为它们是 equal 并且在相同的序列中,但是当我运行SequenceEqual()时,它返回false

// For brevity’s sake assume the two-list data is as follows
List<string> list1 = new List<string> {"1", "2", "3"};
List<string> list2 = new List<string> {"1", "2", "3"};

list1.SequenceEqual(list2); // returning false
list1.Except(list2).Count(); // returning 0
list2.Except(list1).Count(); // returning 0

实际上,我的列表数据要大得多(~ 8000项),但我很困惑,为什么Except().Count()SequenceEqual()都得到0,而SequenceEqual()得到false
编辑:将Count添加到Except示例中。

svdrlsy4

svdrlsy41#

你做 * 不同 * 的比较。至于Except

  • 删除 * 重复项 *
  • 不考虑项目的 * 顺序 *
  • 如果第一个参数中不存在第二个参数中的项,则忽略这些项

这就是为什么

// Duplicated "2" will be ignored
List<string> list1 = new List<string>() { "1", "2", "3", "2" };
// Duplicated "3" will be ignored
// Order doesn't matter
// "7777777" will be ignored
List<string> list2 = new List<string>() { "3", "3", "1", "2", "7777777"};

// 0; since all items within list1 - "1", "2", "3"
// are in the list2, duplicates ignored
int count = list1.Except(list2).Count();

当且仅当序列顺序相同且重复时,SequenceEqual返回true。在上面的例子中,SequenceEqual返回false,因为list1.Count != list2.Countlist1[0] != list2[0]等。

相关问题