2012-05-04 10 views
6

No entiendo por qué esta prueba fallará con el mensaje "Error de Assert.AreEal. Esperado: < 2>. Actual: < 1>."C# Linq Conjuntos de caracteres Excepto() - Comportamiento extraño

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

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

pero el siguiente pasaría:

 [TestMethod] 
     public void Test() 
     { 
      char[] a1 = "abc".ToCharArray(); 
      char[] a2 = {'a', 'b', 'c', ' ', 'd', ' '}; 

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

Respuesta

3

Excepto que le da una lista distinta.

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

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

La función Except devuelve la diferencia conjunto de las dos secuencias - no la diferencia.

El carácter de espacio solo se devuelve una vez.