Этот метод возвращает false
. Я не могу понять, почемуПочему метод возвращает false?
private bool SomeMethod()
{
return new byte[0] == new byte[0];
}
Этот метод возвращает false
. Я не могу понять, почемуПочему метод возвращает false?
private bool SomeMethod()
{
return new byte[0] == new byte[0];
}
Вы создаете два массива байтов. Эти два массива имеют разные адреса памяти и сравнивают разные адреса. False
bool result = (new byte[0] == new byte[0]);
Console.WriteLine(result);
......
IL_0001: ldc.i4.0 // zero int for size in the evaluation stack
IL_0002: newarr System.Byte // create an array of zero bytes
IL_0007: ldc.i4.0 // zero int for size in the evaluation stack
IL_0008: newarr System.Byte // create another array of zero bytes
IL_000D: ceq // compare the address of the two arrays
IL_000F: stloc.0 // result
IL_0010: ldloc.0 // result
IL_0011: call System.Console.WriteLine
Массивы являются ссылочными типами. Каждый экземпляр имеет свою собственную ссылку, что означает, что они не будут равны.
Вы создаете два новых массива и сравниваете ссылки. Когда я говорю ссылку, я имею в виду место в памяти, где каждый живет. Поскольку они не то же самое, они всегда будут терпеть неудачу.
Это верно, если вы это сделали;
byte[] a = new byte[0];
byte[] b = a;
return a == b;