sizeof operator – fastställa minnesbehoven för en viss typ

Operatorn sizeof returnerar antalet byte som används av en variabel av en viss typ. Argumentet till operatorn sizeof måste vara namnet på en ohanterad typ eller en typparameter som är begränsad till en ohanterad typ.

Operatorn sizeof kräver en osäker kontext. De uttryck som presenteras i följande tabell utvärderas dock i kompileringstid till motsvarande konstanta värden och kräver ingen osäker kontext:

Uttryck Konstant värde
sizeof(sbyte) 1
sizeof(byte) 1
sizeof(short) 2
sizeof(ushort) 2
sizeof(int) 4
sizeof(uint) 4
sizeof(long) 8
sizeof(ulong) 8
sizeof(char) 2
sizeof(float) 4
sizeof(double) 8
sizeof(decimal) 16
sizeof(bool) 1

Du behöver inte heller använda en osäker kontext när operatorns sizeof operand är namnet på en uppräkningstyp .

I följande exempel visas hur operatorn sizeof används:

public struct Point
{
    public Point(byte tag, double x, double y) => (Tag, X, Y) = (tag, x, y);

    public byte Tag { get; }
    public double X { get; }
    public double Y { get; }
}

public class SizeOfOperator
{
    public static void Main()
    {
        Console.WriteLine(sizeof(byte));  // output: 1
        Console.WriteLine(sizeof(double));  // output: 8

        DisplaySizeOf<Point>();  // output: Size of Point is 24
        DisplaySizeOf<decimal>();  // output: Size of System.Decimal is 16

        unsafe
        {
            Console.WriteLine(sizeof(Point*));  // output: 8
        }
    }

    static unsafe void DisplaySizeOf<T>() where T : unmanaged
    {
        Console.WriteLine($"Size of {typeof(T)} is {sizeof(T)}");
    }
}

Operatorn sizeof returnerar ett antal byte som skulle allokeras av den vanliga språkkörningen i hanterat minne. För structtyper innehåller det värdet alla utfyllnad, vilket visas i föregående exempel. Resultatet av operatorn sizeof kan skilja sig från resultatet av Marshal.SizeOf metoden, som returnerar storleken på en typ i ohanterat minne.

Språkspecifikation för C#

Mer information finns i avsnittet om storleken på operatorn i C#-språkspecifikationen.

Se även