Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Property | Değer |
|---|---|
| Kural Kimliği |
CA1878 |
| Title | Salt okunur dizi alanları yerine ReadOnlySpan özelliklerini tercih edin |
| Kategori | Performans |
| Düzeltme kırılgan mı yoksa sağlam mı | Non-breaking |
| .NET 11'de varsayılan olarak etkindir | Öneri olarak |
| Geçerli diller | C# |
Cause
Özel statik salt okunur tek boyutlu dizi alanı desteklenen sabit değerler içerir ve gözlemlenen tüm kullanımlar bir ReadOnlySpan<T> özelliği kullanmak için güvenle yeniden yazılabilir.
Kural açıklaması
Statik salt okunur dizi alanı, yönetilen bir dizi ayırması gerektirir. Bir ReadOnlySpan<T> özellik desteklenen sabit verileri döndürdüğünde, C# derleyicisi yönetilen dizi ayırmadan verileri düşürebilir. Alanı bir özellik ile değiştirmek, verilere salt okunur erişimi korurken ayırmaları azaltabilir.
Çözümleyici aşağıdaki öğe türlerini destekler:
-
bool,bytevesbytekullanılabilir olduğunda ReadOnlySpan<T> desteklenir. -
short,ushort,char,int,uint, ,float,long, ,ulongvedoubleyalnızca hedef derleme genel statik RuntimeHelpers.CreateSpan<T>(RuntimeFieldHandle) yöntemi kullanıma sunarken desteklenir. .NET 7 ve üzeri başvuru derlemeleri bu yöntemi kullanıma sunar.
Çözümleyici , , , nintnuintsabit listesi türleri, rastgele yapılar veya başvuru türleri dizilerini decimaltanılamaz. Ayrıca, pürüzlü dizileri veya çok boyutlu dizileri tanılamaz.
İhlalleri düzeltme
dizi alanını döndüren ReadOnlySpan<T>ifade gövdeli bir özellik ile değiştirin.
Kod düzeltmesi, alanın uygun kullanımlarını yeniden yazar. Desteklenen AsSpan çağrılar için, yedekli bir çağrıyı kaldırır veya çağrıyı gibi Sliceeşdeğer bir span işlemiyle değiştirir. Kod düzeltmesi, her kullanımın semantiğini koruyamıyorsa sunulmaz.
Example
Aşağıdaki kod parçacığı CA1878 ihlalini gösterir:
class CA1878ViolationExample
{
private static readonly byte[] Prefix = new byte[] { 0x50, 0x4B, 0x03, 0x04 };
public static ReadOnlySpan<byte> GetPrefix() => Prefix;
}
Aşağıdaki kod parçacığı ihlali düzeltir:
class CA1878FixExample
{
private static ReadOnlySpan<byte> Prefix => new byte[] { 0x50, 0x4B, 0x03, 0x04 };
public static ReadOnlySpan<byte> GetPrefix() => Prefix;
}
Uyarıların ne zaman bastırılması gerekiyor?
Dizinin kimliğini veya değiştirilebilirliğini bilerek koruyorsanız veya API uyumluluğunu korumak için üyenin bir dizi alanı olarak kalmasını gerektiriyorsa uyarıyı gizleme. Kural yalnızca gözlemlenen kullanımları güvenli bir şekilde yeniden yazabilen özel statik salt okunur alanları bildirir.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1878
// The code that's violating the rule is on this line.
#pragma warning restore CA1878
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, none önem derecesini olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1878.severity = none
Daha fazla bilgi için bkz. Kod analizi uyarılarını gizleme.