首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是Assert.AreEqual<byte[]>(1,2);比较对象或值

是Assert.AreEqual<byte[]>(1,2);比较对象或值
EN

Stack Overflow用户
提问于 2016-05-27 13:01:28
回答 3查看 5.5K关注 0票数 5

为什么T不能成为byte[]?见

https://msdn.microsoft.com/de-de/library/ms243446.aspx

代码语言:javascript
运行
复制
        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);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-27 13:06:08

您正在比较一个字节数组与另一个字节数组的引用相等性(即两个变量指向同一个数组),而在本例中则并非如此。

更好的方法是使用SequenceEqual进行测试。

代码语言:javascript
运行
复制
using System.Linq;

Assert.IsTrue(one.SequenceEqual(two));
票数 23
EN

Stack Overflow用户

发布于 2016-05-27 13:07:56

井,

代码语言:javascript
运行
复制
  Assert.AreEqual<T>(one, two);

比较时使用T.Equals()。因为数组不覆盖Equals

代码语言:javascript
运行
复制
  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比较引用而不是值,而onetwo的引用是不同的。如果要比较数组的项,请使用SequenceEqual

票数 3
EN

Stack Overflow用户

发布于 2016-05-27 13:08:05

要回答题目中的问题,请看以下内容:

Assert.AreEqual<byte[]>(one, two);

将进行引用比较,因为您正在比较两个数组。

要比较内容,请使用@RB。提到并使用SequenceEqual

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37484237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档