Udostępnij za pośrednictwem


Unsafe.SkipInit<T>(T) Metoda

Definicja

Pomija określone reguły przypisania dla danego odwołania.

public:
generic <typename T>
 static void SkipInit([Runtime::InteropServices::Out] T % value);
public static void SkipInit<T> (out T value);
static member SkipInit : 'T -> unit
Public Shared Sub SkipInit(Of T) (ByRef value As T)

Parametry typu

T

Typ odwołania.

Parametry

value
T

Odwołanie, którego inicjowanie powinno zostać pominięte.

Uwagi

Ta metoda jest zwykle używana w celu uniknięcia podwójnej inicjalizacji podczas inicjowania struktur typu unii. Rozważmy następujący przykład, który generuje błąd kompilatora języka C#.

using System;
using System.Runtime.InteropServices;

public static MyUnionStruct MyMethod() {
    MyUnionStruct value;
    value.SomeIntField = 42;
    return value; // CS0165: Use of unassigned local variable 'value'
}

[StructLayout(LayoutKind.Explicit)]
public struct MyUnionStruct
{
    [FieldOffset(0)]
    public int SomeIntField;

    [FieldOffset(0)]
    public byte SomeByteField;
}

Ten błąd występuje, ponieważ kompilator oczekuje, że wszystkie pola struktury zostaną zainicjowane przed zastosowaniem struktury lub zwróceniem do obiektu wywołującego.

Jednym ze sposobów uniknięcia tego błędu kompilatora jest upewnienie się, że cała struktura jest zainicjowana zero przed ustawieniem poszczególnych pól, jak pokazano w poniższym przykładzie.

// This sample compiles successfully.
public static MyUnionStruct MyMethod() {
    MyUnionStruct value = default; // the struct is now guaranteed assigned
    value.SomeIntField = 42;
    return value;
}

Jeśli chcesz uniknąć początkowej inicjalizacji zerowej, możesz wywołać SkipInit metodę , aby pominąć ostrzeżenie kompilatora.

using System.Runtime.CompilerServices;

// This sample also compiles successfully.
public static MyUnionStruct MyMethod() {
    MyUnionStruct value;
    Unsafe.SkipInit(out value); // compiler believes the struct has been guaranteed assigned
    value.SomeIntField = 42;
    return value;
}

Ostrzeżenie

Upewnij się, że struktura została odpowiednio zainicjowana. W przeciwnym razie pola struktury mogą zawierać niezainicjowane dane ze stosu.

Dotyczy