为什么功能应用除外?

时间:2011-07-18 06:47:20

标签: c#

  

可能重复:
  Except has similar effect to Distinct?

我有两个List<String>喜欢

lstOne = { "A", "B", "C" ,"C" ,"C" };
lstTwo = { "A" };

lstResult = lstOne.Except(lstTwo).ToList();

现在预期的输出是

lstReult = { "B","C","C","C" };

但是actula结果就像

lstResult = { "B","C" };

为什么会这样?我使用了Except,为什么它也适用Distinct

3 个答案:

答案 0 :(得分:12)

“除了”是documented返回两个序列的集差异

根据定义,设定差异是一组。根据定义设置没有重复项。

  

预期产出是......

不,预期输出与实际输出相同。

如果您期望不同的东西,我的建议是调整您的期望以匹配记录的行为。

答案 1 :(得分:11)

返回“documented”包含两个序列元素的集合差异的序列。“集合没有重复项。

这可能是一个微妙的观点,但它按照规范运作。

如果你想要重复:

var lstOne = new[] { "A", "B", "C" ,"C" ,"C" };
var except = new HashSet<string> { "A" };

var lstResult = lstOne.Where(x => !except.Contains(x)).ToList();
   // ^^ "B", "C", "C", "C"

答案 2 :(得分:2)

MSDN Definition:“通过使用默认的相等比较器来比较值,产生两个序列的集合差异。” - &GT;设置差异 - &gt;每个键都是唯一的。