¿Por qué no puedo usar sizeof() en estructuras simples?sizeof() estructuras desconocidas. ¿Por qué?
por ejemplo:
private struct FloatShortPair
{
public float myFloat;
public short myShort;
};
int size = sizeof(FloatShortPair); //CS0233
CS0233 de error: 'FloatShortPair' no tiene un tamaño predefinido, por lo tanto sizeof sólo se puede utilizar en un contexto inseguro (considerar el uso de System.Runtime.InteropServices.Marshal.SizeOf)
MSDN estados:
El operador sizeof sólo se puede utilizar para los tipos que son el tiempo de compilación constantes. Si obtiene este error, asegúrese de que el tamaño de el identificador se pueda determinar en tiempo de compilación. Si no puede, entonces use SizeOf en vez de sizeof.
¿Cómo son las constantes de tiempo de compilación y no de cortocircuito? 8-/
Como el mensaje de error sugiere, use System.Runtime.InteropServices.Marshal.SizeOf. –
Pregunta relacionada (perdón por secuestro): Si tiene un control más fino sobre el diseño del tipo (StructLayoutAttribute con compensaciones explícitas) ¿eso lo convierte en una constante de tiempo de compilación? – MattDavey
@MattDavey: No según las especificaciones. Básicamente, la especificación del lenguaje C# intenta no entrar en los detalles de implementación de cosas como StructLayoutAttribute. –