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?