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

时间:2012-05-04 13:44:10

标签: c# linq

我无法理解为什么此测试会因消息“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());
        }

4 个答案:

答案 0 :(得分:4)

除了为您提供 SET ,这意味着它不会返回重复项。

请参阅Except documentation

答案 1 :(得分:3)

除了给你一个明确的清单。

char[] a1 = "abc".ToCharArray();
char[] a2 = {'a', 'b', 'c', ' ', '1'};

Assert.AreEqual(2, a2.Except(a1).Count()); // Passes

答案 2 :(得分:3)

Except函数返回两个序列的设置差异 - 而不是差异

空格字符只返回一次。

答案 3 :(得分:2)

因为除了找到两个序列的差异

http://msdn.microsoft.com/ru-ru/library/system.linq.enumerable.except.aspx

也许你需要这样的东西

var c=a2.Where(a=>a1.Contains(a)==false).Count();