为什么功能应用除外?

Tho*_*eld 3 c#

可能重复:
除了与Distinct有类似的效果?

我有两个List<String>喜欢

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

lstResult = lstOne.Except(lstTwo).ToList();
Run Code Online (Sandbox Code Playgroud)

现在预期的产出是

lstReult = { "B","C","C","C" };
Run Code Online (Sandbox Code Playgroud)

但是actula结果就像

lstResult = { "B","C" };
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我已经习惯了Except,为什么它也适用Distinct

Eri*_*ert 12

"Except"被记录为返回两个序列集合差异.

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

预期的产出是......

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

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

  • 理解"设置差异"需要足够的数学背景知道集合不包含重复元素.在浏览文档时,人们很容易错过它所说的集合,而不是序列.我会明确表示它通过指定类似于"返回第一个序列中不属于第二个序列的所有不同元素"来返回不同的元素 (2认同)

Mar*_*ell 11

它被记录为返回"包含两个序列的元素的集合差异的序列".集合没有重复项.

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

如果你想要重复:

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"
Run Code Online (Sandbox Code Playgroud)