7

我不明白为什么这个测试会失败并显示消息“Assert.AreEqual failed. Expected:<2>.Actual:<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

4 回答 4

5

除了给你一个SET,这意味着它不会返回重复项。

请参阅除文档

于 2012-05-04T13:48:56.207 回答
4

Except函数返回两个序列的集合差异——而不是差异

空格字符只返回一次。

于 2012-05-04T13:48:55.347 回答
3

因为 except 发现两个序列的差异

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

也许你需要这样的东西

var c=a2.Where(a=>a1.Contains(a)==false).Count();
于 2012-05-04T13:47:33.340 回答
3

除了给你一个不同的列表。

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

Assert.AreEqual(2, a2.Except(a1).Count()); // Passes
于 2012-05-04T13:48:16.457 回答