2011-04-13 19 views

Respuesta

11

Marshal.SizeOf(typeof(MyStruct)) * array.Length

+0

multiplicado por arr.Length? ;-) –

+0

@Mario: Bien, corregido. ;) @Downvoter: ¿Fue ese el motivo? – Mehrdad

+0

No lo tengo. Digamos que tengo 'público fijo Byte smthng [12];'. Si escribo, p. 'int a = smthng.Lenght;' desencadena un error de compilación. Ninguno de los dos funcionó 'sizeof()'. Entonces, ¿qué estoy haciendo mal? –

5

No es el operador sizeof. Sin embargo, solo puede usarse en un contexto inseguro.

También hay una diferencia en el método propuesto por Mehrdad, namingly:

Para todos los demás tipos, incluyendo estructuras, el operador sizeof se puede utilizar solamente en los bloques de código no seguros. Aunque puede usar el método Marshal.SizeOf, el valor devuelto por este método no siempre es el mismo que el valor devuelto por sizeof. Marshal.SizeOf devuelve el tamaño después de que el tipo se haya calculado, mientras que sizeof devuelve el tamaño tal como ha sido asignado por el tiempo de ejecución de lenguaje común, incluido cualquier relleno.

source

Ejemplo:

unsafe 
{ 
    int size = sizeof(MyStruct)*myArray.Length; 
} 
Cuestiones relacionadas