C# Linq Char 数组 Except() - 奇怪的行为
本文关键字:Char Linq 数组 Except | 更新日期: 2023-09-27 18:33:16
我不明白为什么这个测试会失败,并显示消息"Assert.AreEqual失败。预期:<2>。实际:<1>."
[TestMethod]
public void Test()
{
char[] a1 = "abc".ToCharArray();
char[] a2 = {'a', 'b', 'c', ' ', ' '};
Assert.AreEqual(2, a2.Except(a1).Count());
}
但以下内容会通过:
[TestMethod]
public void Test()
{
char[] a1 = "abc".ToCharArray();
char[] a2 = {'a', 'b', 'c', ' ', 'd', ' '};
Assert.AreEqual(2, a2.Except(a1).Count());
}
Except 给你一个 SET,这意味着它不返回重复项。
请参阅"除文档"
Except
函数返回两个序列的集合差 - 而不是差值。
空格字符仅返回一次。
因为 except 找到两个序列的差异
http://msdn.microsoft.com/ru-ru/library/system.linq.enumerable.except.aspx
也许你需要这样的东西
var c=a2.Where(a=>a1.Contains(a)==false).Count();
Except 会给你一个不同的列表。
char[] a1 = "abc".ToCharArray();
char[] a2 = {'a', 'b', 'c', ' ', '1'};
Assert.AreEqual(2, a2.Except(a1).Count()); // Passes