我有两个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
?
答案 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;每个键都是唯一的。