Compiler Error CS0233

'identifier' does not have a predefined size, therefore sizeof can only be used in an unsafe context

Without unsafe context, the sizeof operator can only be used for types which size is a compile-time constant. If you are getting this error, use an unsafe context.

The following example generates 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 instead:  
        // unsafe
        // {
        //     Console.WriteLine(sizeof(S));
        // }
   }  
}