Unsafe.SkipInit<T>(T) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin