[TestMethod()]
public void TestExceptWithRandomInput()
{
byte[] listA = new byte[4096];
var rand = new Random();
rand.NextBytes(listA);
byte[] listB = new byte[] { 0x00 };
var nullCount = (from a in listA
where a == 0x00
select a);
var listC = listA.Except(listB);
Assert.AreEqual(4096, listA.Length);
Assert.AreEqual(4096 - nullCount.Count(), listC.Count()); //Fails!!
}
[TestMethod()]
public void TestWhereWithRandomInput()
{
byte[] listA = new byte[4096];
var rand = new Random();
rand.NextBytes(listA);
byte[] listB = new byte[] { 0x00 };
var nullCount = (from a in listA
where a == 0x00
select a);
var listC = listA.Where(a => !listB.Contains(a));
Assert.AreEqual(4096, listA.Length);
Assert.AreEqual(4096 - nullCount.Count(), listC.Count()); //Successful
}
上記のコードは、Except()関数を使用すると失敗するように見えますが、Where()を使用すると正常に機能します。何が欠けているようですか?バイト用にIEqualityComparerを実装する必要がありますか?それは複雑なタイプにのみ必要だと思いました。