tipo tamaño sirve que para example data c# arrays bytearray

sirve - tamaño de int c#



sbyte[] se puede convertir mágicamente a byte (1)

No, no es un error. Es solo una discrepancia de impedancia entre las reglas del lenguaje C # (que afirman que no hay conversión disponible) y las reglas CLR (donde la conversión está disponible).

Tenga en cuenta que el compilador realmente, realmente piensa que sabe mejor:

byte[] bytes = new byte[10]; // error CS0030: Cannot convert type ''byte[]'' to ''sbyte[]'' sbyte[] sbytes = (sbyte[]) bytes;

E incluso cuando tienes un código que se compila con una advertencia, realmente no hace lo que dice:

byte[] bytes = new byte[10]; // warning CS0184: The given expression is never of the provided (''sbyte[]'') if (bytes is sbyte[]) { Console.WriteLine("Yes"); }

Ejecute ese código y no obtendrá resultados ... pero si simplemente cambia el tipo de bytes tiempo de compilación, se imprime Sí:

object bytes = new byte[10]; // No warning now if (bytes is sbyte[]) { Console.WriteLine("Yes"); // This is reached }

No estoy seguro de si se trata de un error de .NET, pero me parece muy interesante.

Como era de esperar, no puedo hacer esto:

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

Sin embargo, si el tipo de sbytes es un object , esto funciona:

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

Observación 1 : El mismo problema ocurre para int[] - uint[] y los otros tipos primitivos también.

Observación 2 : aunque el código maneja la matriz como un byte[] , el depurador pierde el foco y muestra ? -s en la matriz.

Observación 3 : esto funciona solo para matrices, no para los tipos subyacentes en sí mismos:

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

Ok, por supuesto que puedo comprobar el tipo como este:

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

¿Es este un comportamiento previsto del operador as y el lanzamiento directo, o es un error de .NET?