Güvenli olmayan kod yapılarındaki hataları ve uyarıları düzeltme

Bu makale aşağıdaki derleyici tanılamalarını kapsar:

  • CS0193: * veya -> işleci bir işaretçiye uygulanmalıdır
  • CS0196: İşaretçi yalnızca bir değerle dizine alınmalıdır
  • CS0208: Yönetilen türün adresini alamaz, boyutunu alamaz veya işaretçi bildiremez ('type')
  • CS0209: Bildirilen ifadede yerel bir fixed türünün işaretçi türünde olması gerekir
  • CS0210: fixed veya using deyimi bildirimi için bir başlatıcı sağlamalısınız
  • CS0211: Verilen ifadenin adresi alınamıyor
  • CS0212: Yalnızca bir ifade başlatıcısının içinde sabitlenmemiş bir fixed ifadenin adresini alabilirsiniz
  • CS0213: Zaten sabit olan bir ifadenin adresini almak için fixed deyimini kullanamazsınız
  • CS0214: İşaretçiler ve sabit boyutlu arabellekler yalnızca güvenli olmayan bir bağlamda kullanılabilir
  • CS0227: Güvenli olmayan kod yalnızca ile derleniyorsa /unsafegörünebilir
  • CS0233: 'tanımlayıcı' önceden tanımlanmış bir boyuta sahip olmadığından, sizeof yalnızca güvenli olmayan bir bağlamda kullanılabilir
  • CS0242: Söz konusu işlem geçersiz işaretçilerde tanımlanmamış
  • CS0244: İşaretçi türlerinde 'is' veya 'as' geçerli değil
  • CS0254: Sabit deyim atamasının sağ tarafı bir atama ifadesi olmayabilir
  • CS0459: Salt okunur bir yerel değişkenin adresi alınamıyor
  • CS0821: Örtük olarak yazılan yerel değişkenler düzeltilemez
  • CS1641: Sabit boyutlu arabellek alanı, alan adından sonra dizi boyutu belirticisine sahip olmalıdır
  • CS1642: Sabit boyutlu arabellek alanları yalnızca yapıların üyesi olabilir
  • CS1656: 'salt okunur değişken türü' olduğundan 'değişken' atanamıyor
  • CS1663: Sabit boyutlu arabellek türü aşağıdakilerden biri olmalıdır: bool, byte, short, int, long, , char, , sbyte, ushort, uintulongfloat veya double
  • CS1664: Uzunluğu 'length' ve türü 'type' olan sabit boyutlu arabellek çok büyük
  • CS1665: Sabit boyutlu arabelleklerin uzunluğu sıfırdan büyük olmalıdır
  • CS1666: Sabitlenmemiş ifadelerde bulunan sabit boyutlu arabellekleri kullanamazsınız. Sabit deyimini kullanmayı deneyin.
  • CS1708: Sabit boyutlu arabelleklere yalnızca yerel ayarlar veya alanlar aracılığıyla erişilebilir
  • CS1716: 'System.Runtime.CompilerServices.FixedBuffer' özniteliğini kullanmayın. Bunun yerine 'sabit' alan değiştiricisini kullanın.
  • CS1919: Nesne oluşturmada güvenli olmayan tür 'tür adı' kullanılamaz
  • CS4004: Güvenli olmayan bir bağlamda olamaz await
  • CS7092: Sabit arabellek yalnızca bir boyuta sahip olabilir.
  • CS8372: Bir özellikte 'System.Runtime.CompilerServices.FixedBuffer' özniteliğini kullanmayın
  • CS8385: Verilen ifade sabit bir deyimde kullanılamaz
  • CS8500: Bu işlem, yönetilen bir türün ('type') adresini alır, boyutunu alır veya işaretçisini bildirir
  • CS8812: 'method' &method grubu 'type' işlev dışı işaretçi türüne dönüştürülemiyor.
  • CS9049: Sabit alan bir başvuru alanı olmamalıdır.
  • CS9123: '&' işleci, zaman uyumsuz yöntemlerdeki parametrelerde veya yerel değişkenlerde kullanılmamalıdır.
  • CS9360: Bu işlem yalnızca güvenli olmayan bir bağlamda kullanılabilir
  • CS9361: stackalloc içinde SkipLocalsInit başlatıcı olmayan ifade yalnızca güvenli olmayan bir bağlamda kullanılabilir
  • CS9362: 'member' güvenli olmayan bir bağlamda kullanılmalıdır çünkü 'unsafe' olarak işaretlenir
  • CS9363: İmzasında işaretçiler olduğundan 'üye' güvenli olmayan bir bağlamda kullanılmalıdır
  • CS9364: Güvenli olmayan üye 'üye' 'üye' güvenli üyeyi geçersiz kılamaz
  • CS9365: Güvenli olmayan eleman 'üye', güvenli eleman 'üye'yi örtük olarak uygulayamaz
  • CS9366: Güvenli olmayan üye 'üye', güvenli üye 'üye'yi implemente edemez
  • CS9367: RequiresUnsafeAttribute bu simgeye uygulanamaz.
  • CS9368: RequiresUnsafeAttribute yalnızca güncelleştirilmiş bellek güvenliği kuralları altında geçerlidir.
  • CS9376: 'genel tür veya yöntem' içindeki 'tür parametresi' tür parametresinin 'unsafe' kısıtlamasını karşılamak için, 'new()' olarak işaretlenen 'constructor' oluşturucusu için bir unsafe bağlam gereklidir
  • CS9377: 'unsafe' değiştiricisinin geçerli bellek güvenliği kuralları altında hiçbir etkisi yoktur.
  • CS9379: Kaynakta 'RequiresUnsafeAttribute' kullanmayın; bunun yerine 'unsafe' değiştiricisini kullanın.
  • CS9388: 'safe' değiştiricisi yalnızca '' olarak işaretlenmemişextern 'unsafe' üyelerinde kullanılabilir.
  • CS9389: 'extern' üyesi '' veya 'unsafesafe' olarak işaretlenmelidir.
  • CS9390: Her iki kısmi üye bildirimi de 'safe' olarak işaretlenmelidir veya hiçbiri 'safe' olarak işaretlenemez
  • CS9392: Açık veya genişletilmiş düzen türündeki alan '' veya 'unsafesafe' olarak işaretlenmelidir.
  • CS9396: 'unsafe' veya 'safe' değiştiricileri, hem 'property' özelliğinde veya dizin oluşturucusunda hem de erişimcisinde belirtilemez. Bunlardan birini kaldırın.
  • CS9397: Özellik veya dizin oluşturucu 'property' için tüm erişimcilerde aynı 'unsafe' ya da 'safe' değiştiricisi belirtilemez. Bunun yerine, bu değiştiriciyi özelliğin kendisinde belirtin.
  • CS9398: 'fixed' deyimi bağlamında await kullanılamaz

İşaretçi işlemleri ve işaretçi çözme

  • CS0193: * veya -> işleci bir işaretçiye uygulanmalıdır
  • CS0196: İşaretçi yalnızca bir değerle dizine alınmalıdır
  • CS0242: Söz konusu işlem geçersiz işaretçilerde tanımlanmamış

İşaretçi işlemlerini doğru kullanmak için başvuru kaldırma, dizin oluşturma ve aritmetik işlemlere yönelik kuralları izleyin. Daha fazla bilgi için bkz . İşaretçi türleri ve İşlev işaretçileri.

  • * veya -> işlecini yalnızca veri işaretçilerine (CS0193) uygulayın. Bu işleçleri noktalayıcı olmayan türlerde veya işlev işaretçileriyle kullanmayın. C/C++ dilinden farklı olarak, C# dilinde işlev göstericilerini dereference edemezsiniz.
  • Yalnızca bir değere sahip dizin işaretçileri (CS0196). İşaretçiler çok boyutlu dizin oluşturmayı desteklemez.
  • Void işaretçilerinde tanımsız işlemlerden kaçının (CS0242). Örneğin, derleyici işaret edilen verilerin boyutunu bilmediğinden boşluk işaretçisini artırmayın.

İşaretçi türleri ve yönetilen türler

  • CS0208: Yönetilen bir türün adresini alamaz, boyutunu hesaplayamaz veya işaretçisini bildiremez ('type')
  • CS0233: 'tanımlayıcı' önceden tanımlanmış bir boyuta sahip olmadığından, sizeof yalnızca güvenli olmayan bir bağlamda kullanılabilir
  • CS8500: Bu, yönetilen bir türün ('type') adresini alır, boyutunu belirler veya ona işaretçi bildirimi yapar

İşaretçilerle ve sizeof işleçle doğru şekilde çalışmak için yönetilmeyen türleri ve uygun bağlamları kullanın. Daha fazla bilgi için bkz. Yönetilmeyen türler ve sizeof işleç.

  • İşaretçileri yalnızca yönetilmeyen türlerle (CS0208) kullanın. Yönetilen türlerin adresini almayın, boyutunu almayın veya işaretçileri tanımlamayın. Yönetilen türler, başvuru türü alanlarını veya özelliklerini içeren başvuru türlerini ve yapıları içerir.
  • Boyutu derleme zamanı sabiti olmayan türlerle çalışırken bir sizeof bağlamında unsafe işlecini kullanın (CS0233).
  • Bir yönetilen türün (CS8500) adresini almaktan, boyutunu almaktan veya ona işaretçi tanımlamaktan kaçının. Derleyici yönetilen türlerde işaretçi işlemlerini algıladığında bu uyarı (düzey 4) tetiklenir. Yönetilen bir tür, herhangi bir başvuru tipi veya alanı ya da özelliği olarak bir başvuru tipi içeren herhangi bir yapıdır. Daha fazla bilgi için bkz. Yönetilmeyen türler.

Sabit deyim kullanımı

  • CS0209: Fixed bir ifadede bildirilen yerel değişkenin türü bir işaretçi türü olmalıdır
  • CS0210: Sabit veya using deyimi bildiriminde bir başlatıcı sağlamanız gerekir
  • CS0211: Verilen ifadenin adresi alınamıyor
  • CS0212: Sabit bir deyim başlatıcısının içinde yalnızca sabitlenmemiş ifadenin adresini alabilirsiniz
  • CS0213: Sabit deyimini kullanarak zaten sabit olan bir ifadenin adresini alamazsınız
  • CS0254: Sabit deyim atamasının sağ tarafı bir atama ifadesi olmayabilir
  • CS0459: Salt okunur bir yerel değişkenin adresini almak mümkün değil
  • CS0821: Örtük olarak yazılan yerel değişkenler düzeltilemez
  • CS1656: 'salt okunur değişken türü' olduğundan 'değişken' atanamıyor
  • CS8385: Verilen ifade sabit bir deyimde kullanılamaz

Bu hatalar, fixed ifadeyi yanlış kullandığınızda oluşur. deyimi fixed , çöp toplayıcının taşınabilir bir değişkeni yeniden konumlandırmasını engeller ve bu değişkene bir işaretçi bildirir. Daha fazla bilgi için bkz. Güvenli olmayan kod ve işaretçiler.

fixed deyimini doğru kullanmak için:

  • Değişkeni işaretçi türü (CS0209) olarak bildirin.
  • fixed deyim bildiriminde bir başlatıcı sağlayın (CS0210).
  • Yalnızca geçerli ifadelerin adresini alın: alanlar, yerel değişkenler ve işaretçi dolaylı (CS0211). İki değişkenin toplamı gibi hesaplanan ifadelerin adresini almayın.
  • Düzeltilmemiş ifadelerde yalnızca fixed deyim başlatıcısı (CS0212) içinde adres alma işlecini kullanın.
  • Zaten sabit olan ifadelerde (fixed) deyimi kullanmayın. Bir unsafe yöntemdeki yerel değişkenler ve parametreler yığında zaten sabittir.
  • Bir fixed deyimi atamasının sağ tarafında dönüşüm ifadeleri kullanmayın (CS0254).
  • Salt okunur yerel değişkenlerin (CS0459) adresini almayın. Döngülerdeki foreach, using deyimleri ve fixed ifadelerinde yer alan değişkenler salt okunurdur. Bu hata artık derleyicinin geçerli sürümleri tarafından üretilmemiştir.
  • var ifadelerinde fixed yerine açık türler kullanın (CS0821).
  • Salt okunur bağlamlardaki değişkenlere, örneğin foreach döngülerde, using deyimlerde veya fixed deyimlerde (CS1656) atama yapmayın.
  • Yalnızca bir fixed deyimde sabitlemeyi destekleyen ifadeler kullanın (CS8385). İfade adreslenebilir bir değişken, dize veya uygun GetPinnableReference bir yöntem uygulayan bir tür olmalıdır.

Güvenli olmayan bağlam gereksinimleri

  • CS0214: İşaretçiler ve sabit boyutlu arabellekler yalnızca güvenli olmayan bir bağlamda kullanılabilir
  • CS0227: Güvenli olmayan kod yalnızca /unsafe ile derleniyorsa görünebilir
  • CS0244: İşaretçi türlerinde 'is' veya 'as' geçerli değil
  • CS1919: Nesne oluşturmada güvenli olmayan tür 'tür adı' kullanılamaz
  • CS4004: Güvenli olmayan bir bağlamda olamaz await
  • CS9123: '&' işleci zaman uyumsuz yöntemlerdeki parametrelerde veya yerel değişkenlerde kullanılmamalıdır
  • CS9360: Bu işlem yalnızca güvenli olmayan bir bağlamda kullanılabilir
  • CS9361: stackalloc içinde SkipLocalsInit başlatıcı olmayan ifade yalnızca güvenli olmayan bir bağlamda kullanılabilir
  • CS9362: 'member' güvenli olmayan bir bağlamda kullanılmalıdır çünkü 'unsafe' olarak işaretlenir
  • CS9363: ‘Üye’, imzasında işaretçiler bulunduğu için tehlikeli bir bağlamda kullanılmalıdır
  • CS9376: 'genel tür veya yöntem'deki 'tür parametresi' tür parametresinin 'unsafe' kısıtlamasını karşılamak için 'new()' olarak işaretlenen 'oluşturucu' oluşturucusu için güvenli olmayan bir bağlam gereklidir
  • CS9398: 'fixed' deyimi bağlamında await kullanılamaz

Bu tanılamalar, gerekli unsafe bağlam olmadan güvenli olmayan kod yapıları kullandığınızda veya güvenli olmayan türlerle izin verilmeyen işlemleri denediğinizde oluşur. Daha fazla bilgi için bkz . Güvenli olmayan kod, işaretçiler ve unsafe anahtar sözcük.

  • İşaretçiler veya sabit boyutlu arabellekler kullanan yöntemleri, türleri veya kod bloklarını anahtar sözcüğüyle unsafe (CS0214) işaretleyin. Derleyici, işaretçi türleri veya sabit boyutlu arabellek alanlarıyla çalışan tüm kodlar için açık bir güvenli olmayan bağlam gerektirir.
  • Proje ayarlarınızda AllowUnsafeBlocks derleyici seçeneğini etkinleştirin (CS0227). Bu seçenek olmadan, kod aksi takdirde doğru olsa bile derleyici tüm unsafe blokları reddeder.
  • is veya as işleçlerini işaretçi türleriyle (CS0244) kullanmayın. İşaretçiler tür hiyerarşisine katılmadığından, bu tür testi işleçleri işaretçiler için geçerli değildir.
  • İşaretçi türü örnekleri (new) oluşturmak için işlecini kullanmayın. Yönetilmeyen bellekte nesne oluşturmak için, işaretçi döndüren yerel yöntemleri çağırmak için birlikte çalışma kullanın.
  • CS4004'ü eski yönerge olarak değerlendirin. C# 14 ve önceki sürümlerde, await güvenli olmayan bir bağlamın içine izin verilmez. C# 15 önizleme bellek güvenliği değişiklikleri kapsamında, await kullanımına unsafe bir bağlamda izin verilmektedir; bu nedenle bu genel kısıtlama artık geçerli kuralı açıklamamaktadır.
  • Zaman uyumsuz yöntemlerde (&CS9123) parametrelerde veya yerel değişkenlerde işleç adresini () kullanmayın. Asenkron işlem bir askıya alma noktasından sonra devam ettiğinde, değişken bellek yığında bulunmayabilir.
  • Güvenli olmayan yapılar içeren işlemleri (işaretçi başvuru kaldırma, adres alma veya sizeof, yönetilmeyen türler gibi) unsafe anahtar kelimesini kullanarak işaretleyin (CS9360). C# 15'in güncelleştirilmiş bellek güvenliği kuralları altında, derleyici güvenli olmayan bağlam gerektiren tek tek işlemleri tanımlar.
  • unsafe özniteliği uygulandığında, stackalloc başlatıcısı olmayan ifadeler için SkipLocalsInit anahtar sözcüğünü kullanın (CS9361). Başlatıcı olmadan yığına ayrılan bellek, başlatılmamış veri içerir; bu da güvenli olmayan bir işlemdir.
  • ile işaretlenmiş üyeleri (CS9362) veya imzalarında işaretçi bulunan üyeleri (unsafe) çağırırken unsafe bağlamını kullanın. Güncellenmiş bellek güvenliği modeli kapsamında derleyici, güvenlik yükümlülüğünü açıkça çağırana aktaran üyeler için CS9362’yi, imzanın kendisinin işaretçiler içerdiği geriye dönük uyumluluk durumları içinse CS9363’ü bildirir.
  • kısıtı, unsafe ile işaretlenmiş bir oluşturucunun çağrılmasını gerektirdiğinde unsafe bağlamını kullanın (new()). Genel örnekleme oluşturucuyu örtük olarak çağırır, bu nedenle çağrı bağlamı güvenli olmamalıdır.
  • fixed öğesini bir await gövdesinin veya başlatıcısının dışına taşıyın (CS9398). C# 15 önizlemesi, unsafe bağlamda await kullanımına izin verir, ancak fixed deyiminin sabitleme süresi yine de bir asenkron askıya alma noktasını kapsayamaz. girmeden önce işlemi bekler fixedveya beklemeden önce deyiminden fixed çıkın.

Güvenli olmayan üye güvenlik sözleşmeleri

  • CS9364: Güvensiz üye 'üye', güvenli üye 'üye'yi geçersiz kılamaz
  • CS9365: Güvenli olmayan üye 'üye' örtük olarak güvenli üye 'üye' uygulayamaz
  • CS9366: Güvenli olmayan 'üye', güvenli 'üye' olarak uygulanamaz
  • CS9367: RequiresUnsafeAttribute bu simgeye uygulanamaz.
  • CS9368: RequiresUnsafeAttribute yalnızca güncelleştirilmiş bellek güvenliği kuralları altında geçerlidir.
  • CS9377: 'unsafe' değiştiricisinin geçerli bellek güvenliği kuralları altında hiçbir etkisi yoktur.
  • CS9379: Kaynakta 'RequiresUnsafeAttribute' kullanmayın; bunun yerine 'unsafe' değiştiricisini kullanın.
  • CS9388: 'safe' değiştiricisi yalnızca '' olarak işaretlenmemişextern 'unsafe' üyelerinde kullanılabilir.
  • CS9389: 'extern' üyesi '' veya 'unsafesafe' olarak işaretlenmelidir.
  • CS9390: Her iki kısmi üye bildiriminin de 'safe' olarak işaretlenmesi gerekir veya hiçbiri 'safe' olarak işaretlenemez
  • CS9396: 'unsafe' veya 'safe' değiştiricileri hem özellikte veya dizin oluşturucuda hem de onun erişimcisinde belirtilemez. Bunlardan birini kaldırın.
  • CS9397: 'property' özelliğinin veya dizin oluşturucusunun tüm erişimcilerinde aynı 'unsafe' ya da 'safe' değiştiricisi belirtilemez. Bunun yerine, bu değiştiriciyi özelliğin kendisinde belirtin.

Bu tanılamalar, güvenli olmayan olarak işaretlenen üyeler için C# 15 güvenlik sözleşmesi kurallarını zorunlu kılar. Derleyici, güvenli olmayan üyelerin temel sınıflar ve arabirimler tarafından oluşturulan güvenlik beklentilerini ihlal etmemesini sağlar. Daha fazla bilgi için bkz . Güvenli olmayan kod, işaretçiler ve unsafe anahtar sözcük.

  • Güvensiz bir üyeyle (CS9364) güvenli bir taban üyeyi değiştirmeyin. Geçersiz kılma, temel üyenin güvenlik sözleşmesini korumalıdır. Temel üye güvenliyse geçersiz kılmanın da güvenli olması gerekir. Değiştiriciyi unsafe veya RequiresUnsafeAttribute geçersiz kılınan üyeden kaldırın veya temel üyeyi güvenli değil olarak işaretleyin.
  • Güvenli bir arabirim üyesini, güvenli olmayan bir üye ile örtük olarak uygulamayın (CS9365). Bir tür bir arabirim üyesini örtük olarak uyguladığında, arabirimi kullananlar güvenli bir işlem bekler. Güvenli olmayan atamayı uygulayan üyeden kaldırın veya açık arabirim uygulamasını kullanın.
  • Güvenli olmayan bir üyeyle (CS9366) güvenli bir arabirim üyesini açıkça uygulamayın. Açık uygulamada bile, arabirim üyesinin güvenlik sözleşmesi korunmalıdır.
  • Yalnızca desteklenen simge türlerine (RequiresUnsafeAttribute) uygulayın. Bu öznitelik yöntemlere, özelliklere, olaylara, oluşturuculara ve türlere uygulanabilir, ancak tüm sembol türleri bunu desteklemez.
  • Güncelleştirilmiş bellek güvenliği kurallarının kullanılmasını RequiresUnsafeAttribute etkinleştirin (CS9368). Bu öznitelik C# 15'in geliştirilmiş bellek güvenliği modelinin bir parçasıdır ve eski kurallar altında tanınmaz. Projenizin güncelleştirilmiş kuralları destekleyen bir dil sürümünü hedeflediğinden emin olun.
  • Hiçbir etkisi olmadığında değiştiriciyi unsafe kaldırın (CS9377). Geçerli bellek güvenliği kuralları kapsamında, belirli bağlamlar değiştiriciyi gerektirmez veya bundan yararlanmaz unsafe . Derleyici, gereksiz ek açıklamaları temizleyebilmeniz için değiştirici anlamsız olduğunda uyarır.
  • unsafe değiştiricisini, kaynakta RequiresUnsafeAttribute uygulamak yerine, doğrudan üye bildiriminde kullanın (CS9379). özniteliği yalnızca meta veri gösterimine yöneliktir; kaynak kodunda unsafe anahtar sözcük doğru mekanizmadır.
  • Değiştiriciyi safe yalnızca henüz işaretlenmemiş extern üyelere unsafe (CS9388) uygulayın. safe değiştiricisi, bir extern üyesini extern bildirimleri için geçerli olan varsayılan unsafe varsayımının dışında açıkça tutar.
  • Her extern üyeyi unsafe veya safe olarak işaretleyin (CS9389). Güncelleştirilmiş bellek güvenliği kuralları altında, derleyici uygulamayı doğrulayamadığından extern üyelerin güvenlik sözleşmelerini açıkça bildirmesi gerekir.
  • Her iki kısmi üye bildiriminin de safe değiştiricisi konusunda aynı olduğundan emin olun (CS9390). Kısmi bildirimlerden biri safe olarak işaretlenmişse, tutarlı bir güvenlik sözleşmesini korumak için diğerinin de safe olarak işaretlenmesi gerekir.
  • safeÖzelliğe veya dizin oluşturucuyaunsafe ya da bir erişimciye uygulayın, ancak ikisine birden değil (CS9396). Özellik, tüm erişimciler için sözleşmeyi tanımlıyorsa, değiştiriciyi doğrudan özelliğin üzerinde belirtin. Yalnızca bir erişimci farklıysa, değiştiriciyi o erişimciye uygulayın ve özelliği değiştirmeden bırakın.
  • Bir özelliğin veya dizin oluşturucunun her erişimcisi aynı unsafe veya safe değiştiriciye sahipse, bu değiştiriciyi özellik veya dizin oluşturucu bildirimine (CS9397) taşıyın. Erişimci değiştiricileri yalnızca erişimciler kasıtlı olarak farklı olduğunda kullanın.

Açık veya genişletilmiş düzen alanları

  • CS9392: Açık veya genişletilmiş düzen türündeki alan '' veya 'unsafesafe' olarak işaretlenmelidir.

Bu tanılama, güncellenmiş bellek güvenliği modeli kapsamında, bir örnek alanı açık veya genişletilmiş yerleşimde yer aldığında ve bildirim, alanın safe mi yoksa unsafe mi olduğunu belirtmediğinde ortaya çıkar. Daha fazla bilgi için bkz . Güvenli olmayan kod, işaretçiler ve safe anahtar sözcük.

  • Bir türdeki her örnek alanını, [StructLayout(LayoutKind.Explicit)] veya [ExtendedLayout] içeren bir türde, safe ya da olarak işaretleyin (unsafe). Alan otomatik özellik, alan destekli özellik, birincil oluşturucu parametresi veya alan benzeri bir olay için sentezlenmişse, değiştiriciyi oluşturulan alana sahip olan özelliğe, parametreye veya olaya yerleştirin.

Sabit boyutlu arabellekler

  • CS1641: Sabit boyutlu arabellek alanı, alan adından sonra dizi boyutu belirticisine sahip olmalıdır
  • CS1642: Sabit boyutlu arabellek alanları yalnızca yapıların üyesi olabilir
  • CS1663: Sabit boyutlu arabellek türü aşağıdakilerden biri olmalıdır: bool, byte, short, int, long, , char, , sbyte, ushort, uintulongfloat veya double
  • CS1664: Uzunluğu 'length' ve türü 'type' olan sabit boyutlu arabellek çok büyük
  • CS1665: Sabit boyutlu arabelleklerin uzunluğu sıfırdan büyük olmalıdır
  • CS1666: Sabitlenmemiş ifadelerde bulunan sabit boyutlu arabelleği kullanamazsınız. Fixed deyimini kullanmayı deneyin.
  • CS1708: Sabit boyutlu arabelleklere yalnızca yerel değişkenler veya alanlar aracılığıyla erişilebilir
  • CS1716: 'System.Runtime.CompilerServices.FixedBuffer' özniteliğini kullanmayın. Bunun yerine 'sabit' alan değiştiricisini kullanın.
  • CS7092: Sabit arabellek yalnızca bir boyuta sahip olabilir.
  • CS8372: Bir özellikte 'System.Runtime.CompilerServices.FixedBuffer' özniteliğini kullanmayın
  • CS9049: Sabit alan bir başvuru alanı olmamalıdır.

Bu hatalar, sabit boyutlu arabelleklerle çalışırken oluşur. Sabit boyutlu arabellekler doğrudan struct'lara eklenmiş dizilerdir ve öncelikle enteroperabilite senaryoları için kullanılır. Daha fazla bilgi için bkz. Sabit boyutlu arabellekler.

Sabit boyutlu arabellekleri doğru şekilde tanımlamak ve kullanmak için:

  • Pozitif bir tamsayı sabiti (CS1641, CS1665) kullanarak alan adından sonraki dizi boyutunu belirtin. Arabelleğin toplam boyutu (öğe sayısı öğe boyutuyla çarpılır) 2^31 baytı (CS1664) aşmamalıdır.
  • Sabit boyutlu arabellekleri sınıflarda değil yalnızca yapılarda (CS1642) bildirin. Bir sınıfta alana ihtiyacınız varsa normal bir dizi kullanın.
  • Desteklenen öğe türlerinden birini kullanın: bool, byte, short, int, , long, char, , sbyteushortuintulongfloatveya double (CS1663).
  • Arabelleğe erişmeden önce içeren yapıyı sabitlemek için bir fixed ifadesi kullanın (CS1666).
  • Sabit boyutlu arabelleklere yalnızca yerel değişkenler veya alanlar aracılığıyla erişin, aracı ifadeler (CS1708) üzerinden değil.
  • fixed Özniteliği (System.Runtime.CompilerServices.FixedBuffer) yerine alan değiştiricisini kullanın. Bu özniteliği özelliklere de uygulamayın (CS8372).
  • Yalnızca bir boyuta (CS7092) sahip sabit arabellekler bildirin. Çok boyutlu sabit arabellekler desteklenmez.
  • Sabit boyutlu arabellekleri alan olarak ref bildirmeyin (CS9049). Sabit boyutlu arabellekler değer alanları olmalıdır.

İşlev işaretçileri

  • CS8812: 'method' metot grubu 'type' işlev olmayan işaretçi türüne dönüştürülemiyor.

İşlev işaretçisi almak için açık işlev işaretçisi türü tür atamasıyla işlecin adresini kullanın. Yöntem gruplarını & veya işlev dışı diğer işaretçi türlerini atamak için kullanmayın. Daha fazla bilgi için bkz . İşlev işaretçileri.