Share via


Unsafe.SkipInit<T>(T) Yöntem

Tanım

Belirli bir başvuru için kesin atama kurallarını atlar.

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)

Tür Parametreleri

T

Başvurunun türü.

Parametreler

value
T

Başlatması atlanması gereken başvuru.

Açıklamalar

Bu yöntem genellikle birleşim türü yapıları başlatılırken çift başlatmayı önlemek için kullanılır. C# derleyici hatası oluşturan aşağıdaki örneği göz önünde bulundurun.

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;
}

Derleyici, yapı kullanılmadan veya çağırana döndürülmeden önce yapısındaki tüm alanların başlatılmasını beklediğinden bu hata oluşur.

Bu derleyici hatasını önlemenin bir yolu, aşağıdaki örnekte gösterildiği gibi tek tek alanlar ayarlanmadan önce tüm yapısı sıfırdan başlatıldığından emin olmaktır.

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

İlk sıfır başlatmayı önlemek istiyorsanız, derleyici uyarısını SkipInit engellemek için yöntemini çağırabilirsiniz.

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;
}

Uyarı

Yapının uygun şekilde başlatıldığından emin olmak için dikkatli olun, aksi takdirde yapı alanları yığından başlatılmamış veriler içerebilir.

Şunlara uygulanır