2010-03-15 20 views
6

Me está pasando un objeto que devuelve "System.Byte [*]" cuando se convierte en una cadena. Aparentemente, esta no es una matriz unidimensional estándar de objetos Byte ("System.Byte []"), entonces, ¿qué es?Qué tipo es System.Byte [*]

Respuesta

7

Probablemente sea una matriz unidimensional con una base distinta de cero.

Aquí está un ejemplo de cómo crear uno:

using System; 

class Test 
{ 
    static void Main() 
    { 
     Array nonZeroBase = Array.CreateInstance 
      (typeof(byte), new int[]{1}, new int[]{2}); 
     Console.WriteLine(nonZeroBase); // Prints byte[*] 
    } 
} 

En la terminología CLR esto se llama un array (arrays rectangulares son también arrays) donde unidimensionales, matrices de base cero se llaman vectores. (Una matriz multidimensional se imprime como byte[,] sin embargo.)

Usted puede estar interesado en this blog post la que Marc Gravell registró solo por la mañana ...

+0

Hmm, parece que ese es probablemente el caso. Gracias por el ejemplo! – Jimbo

+0

No me di cuenta de que este constructo todavía estaba presente, debe ser algo para VB .NET. Me pregunto cuántas bibliotecas hay por ahí que se romperían si se les diera uno de estos como parámetro. Ciertamente siempre pensé que un bucle for de 0 a Length-1 era seguro. –

+0

@Dan: No podrías para convertir esto en byte [] para empezar, solo sería un problema si lo recibiera como 'Array' en su lugar. –

0

No hay ...[*] tipo en C# por lo que recuerdo. Tal vez pueda encontrar la documentación API para esa biblioteca, que le mostrará de qué se trata en realidad. Incluso si no tiene eso, Visual Studio debería mostrarle el tipo cuando intente la autocompletación en el método que devuelve el objeto.

+1

El objeto se pasa como objeto. Traté de atraparlo con if (o.GetType() == typeof (Byte [])) pero esto no funcionó. (Aunque funcionó con I explícitamente aprobado en mi propio Byte []. – Jimbo