Error del compilador CS0233

Actualización: noviembre 2007

Mensaje de error

'identificador' no tiene un tamaño predefinido; por tanto, sizeof sólo se puede utilizar en un contexto no seguro (utilice System.Runtime.InteropServices.Marshal.SizeOf)
'identifier' does not have a predefined size, therefore sizeof can only be used in an unsafe context (consider using System.Runtime.InteropServices.Marshal.SizeOf)

El operador sizeof sólo se puede utilizar para tipos que sean constantes de tiempo de compilación. Si se produce este error, asegúrese de que el tamaño del identificador se pueda determinar durante la compilación. En caso contrario, utilice SizeOf en lugar de sizeof.

Ejemplo

El ejemplo siguiente genera el error CS0233:

// CS0233.cs
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
public struct S
{
    public int a;
}

public class MyClass
{
    public static void Main()
    {
        S myS = new S();
        Console.WriteLine(sizeof(S));   // CS0233
        // Try the following line instead:
        // Console.WriteLine(Marshal.SizeOf(myS));
   }
}