除了返回没有差异的方法之外的umerable

时间:2014-01-14 22:24:09

标签: c#

   var list1 = new[] { 1, 2, 3, 4, 5 };
    var list2 = new int[] { };
    var x = list2.Except(list1).ToList();

这不会返回list1中的所有元素,var x实际上是一个空列表。根据{{​​3}},它应该返回list1中的所有元素。为什么不是,我错过了什么。

  

包含两个序列元素的集合差异的序列。

3 个答案:

答案 0 :(得分:5)

它运作正常:返回list2list1中不存在的所有项目。因为list2已经为空,结果列表也是空的。

查看msdn上的 first 参数说明:

  

将返回IEnumerable<T>,其元素不在秒中。

答案 1 :(得分:2)

MSDN上的措辞可能令人困惑,但请参阅集合理论来理解它。

  

包含两个序列元素的设置差异的序列。

设定差异也称为complement,“是B中的元素集,但不是A”。

考虑到这一点,空数组.Except任何东西仍然是一个空数组。

答案 2 :(得分:0)

你可能想要

var list1 = new[] { 1, 2, 3, 4, 5 };
var list2 = new int[] { };
var x = list2.Union(list1).ToList();

既然你提到了你的期待

  

应返回list1

中的所有元素