ValueTypes的数组不喜欢object.Equals?

Unk*_*own 3 c# arrays

这让我把头发拉了几天:

byte[] _A = new byte[64];
// Fill _A with some meaningful, valid data.

byte[] _B = new byte[_A.Length];
_A.CopyTo( _B, 0 );

if( !_A.Equals( _B ) ) {
    throw new WtfException(
        "It appears object.Equals doesn't work on arrays of value types...");
}
Run Code Online (Sandbox Code Playgroud)

是的,抛出了WtfException.我花了几天时间才注意到.byte是一个ValueType.但是,byte[]System.Array一个参考类型.根据.NET文档:

Equals的默认实现支持引用类型的引用相等,以及值类型的按位相等.引用相等意味着被比较的对象引用引用相同的对象.按位相等意味着被比较的对象具有相同的二进制表示.

有人可以帮忙吗?

zmb*_*mbq 5

您正在比较引用类型(数组)而不是值类型._A和_B确实不同 - 它们是碰巧包含相同值的两个不同的数组.