Bagikan melalui


Unsafe.SkipInit<T>(T) Metode

Definisi

Melewati aturan penetapan yang pasti untuk referensi tertentu.

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)

Jenis parameter

T

Jenis referensi.

Parameter

value
T

Referensi yang inisialisasinya harus dilewati.

Keterangan

Metode ini biasanya digunakan untuk menghindari inisialisasi ganda saat menginisialisasi struct jenis union. Pertimbangkan contoh berikut, yang menghasilkan kesalahan pengkompilasi 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;
}

Kesalahan ini terjadi karena pengkompilasi mengharapkan semua bidang struktur diinisialisasi sebelum struct digunakan atau dikembalikan ke pemanggil.

Salah satu cara untuk menghindari kesalahan pengkompilasi ini adalah dengan memastikan seluruh struktur diinisialisasi nol sebelum bidang individual diatur, seperti yang ditunjukkan dalam contoh berikut.

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

Jika Anda ingin menghindari inisialisasi nol awal, Anda dapat memanggil SkipInit metode dapat digunakan untuk menekan peringatan pengompilasi.

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

Peringatan

Berhati-hatilah untuk memastikan bahwa struktur telah diinisialisasi dengan tepat, jika tidak, bidang struct dapat berisi data yang tidak diinisialisasi dari tumpukan.

Berlaku untuk