sbyte [] pode ser convertido magicamente para byte []

Não tenho certeza se este é um bug do .NET, mas acho realmente interessante.

Como esperado, não posso fazer isso:

sbyte[] sbytes = { 1, 2, 3 };
byte[] bytes = sbytes; // fails: cannot convert source type 'sbyte[]' to taget type 'byte[]'

No entanto, se o tipo desbytes éobject, isso funciona:

object obj = new sbyte[]{ 1, 2, 3 };
byte[] bytes = obj as byte[];
Assert.IsNull(bytes, "WTF??")

Observação 1: O mesmo problema ocorre paraint[] - uint[] e os outros tipos primitivos também.

Observação 2: Embora o código lide com a matriz como umbyte[], o depurador perde o foco e mostra?-s na matriz.

Observação 3: Isso funciona apenas para matrizes, não para os próprios tipos subjacentes:

object sbyteObj = (sbyte)1;
byte byteObj = (byte)sbyteObj; // System.InvalidCastException: Specified cast is not valid.

Ok, é claro que posso verificar o tipo assim:

if (obj.GetType() == typeof(byte[]))

Esse é um comportamento pretendido doas operador e transmissão direta, ou isso é um bug do .NET?

questionAnswers(1)

yourAnswerToTheQuestion