Ohanterade typer (C#-referens)

En typ är en ohanterad typ om det är någon av följande typer:

  • sbyte, byte, short, ushort, int, uint, long, ulong, nint, nuint, char, float, , double, decimaleller bool
  • Alla uppräkningstyper
  • Valfri pekartyp
  • En tupppel vars medlemmar alla är av ohanterad typ
  • Alla användardefinierade structtyper som endast innehåller fält av ohanterade typer.

Du kan använda villkoret unmanaged för att ange att en typparameter är en icke-pekare, icke-nullbar ohanterad typ.

En konstruerad structtyp som endast innehåller fält av ohanterade typer är också ohanterad, vilket visas i följande exempel:

using System;

public struct Coords<T>
{
    public T X;
    public T Y;
}

public class UnmanagedTypes
{
    public static void Main()
    {
        DisplaySize<Coords<int>>();
        DisplaySize<Coords<double>>();
    }

    private unsafe static void DisplaySize<T>() where T : unmanaged
    {
        Console.WriteLine($"{typeof(T)} is unmanaged and its size is {sizeof(T)} bytes");
    }
}
// Output:
// Coords`1[System.Int32] is unmanaged and its size is 8 bytes
// Coords`1[System.Double] is unmanaged and its size is 16 bytes

En allmän struct kan vara källan till både ohanterade och hanterade konstruerade typer. Föregående exempel definierar en allmän struct Coords<T> och visar exempel på ohanterade konstruktionstyper. Exemplet på en hanterad typ är Coords<object>. Den hanteras eftersom den har fälten av typen object , som hanteras. Om du vill att alla konstruerade typer ska vara ohanterade typer använder du villkoret unmanaged i definitionen av en allmän struct:

public struct Coords<T> where T : unmanaged
{
    public T X;
    public T Y;
}

Språkspecifikation för C#

Mer information finns i avsnittet Pekartyper i C#-språkspecifikationen.

Se även