为什么T不能成为byte[]?见
https://msdn.microsoft.com/de-de/library/ms243446.aspx
byte[] one = { 0x1, 0x2, 0x3, 0x4, 0x5 };
byte[] two = { 0x1, 0x2, 0x3, 0x4, 0x5 };
//don't fail
Assert.AreEqual(Convert.ToBase64String(one), Convert.ToBase64String(two));
//fail
Assert.AreEqual<byte[]>(one, two);发布于 2016-05-27 13:06:08
您正在比较一个字节数组与另一个字节数组的引用相等性(即两个变量指向同一个数组),而在本例中则并非如此。
更好的方法是使用SequenceEqual进行测试。
using System.Linq;
Assert.IsTrue(one.SequenceEqual(two));发布于 2016-05-27 13:07:56
井,
Assert.AreEqual<T>(one, two);比较时使用T.Equals()。因为数组不覆盖Equals
byte[] one = { 0x1, 0x2, 0x3, 0x4, 0x5 };
byte[] two = { 0x1, 0x2, 0x3, 0x4, 0x5 };
if (one.Equals(two))
Console.Write("Yes");
else
Console.Write("No"); // <- you'll have this你会有一个意想不到的结果。当Equals不被覆盖时,Object.Equals比较引用而不是值,而one和two的引用是不同的。如果要比较数组的项,请使用SequenceEqual
发布于 2016-05-27 13:08:05
要回答题目中的问题,请看以下内容:
Assert.AreEqual<byte[]>(one, two);
将进行引用比较,因为您正在比较两个数组。
要比较内容,请使用@RB。提到并使用SequenceEqual。
https://stackoverflow.com/questions/37484237
复制相似问题