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());
        }

C# Linq Char 数组 Except() - 奇怪的行为

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