Aracılığıyla paylaş


Uyarı CA1831: Dize için Aralık tabanlı dizin oluşturucular yerine AsSpan kullanın

.NET kod çözümleyici kuralı CA1831 varsayılan olarak .NET 5'te başlayarak etkindir. Bir dizede tabanlı dizin oluşturucu kullanılan ancak hiçbir kopyanın tasarlanmamış olduğu Rangetüm kodlar için bir derleme uyarısı üretir.

Açıklama değiştirildi

.NET 5'den başlayarak .NET SDK'sı .NET kaynak kodu çözümleyicilerini içerir. Ca1831 de dahil olmak üzere bu kuralların bazıları varsayılan olarak etkindir. Projeniz bu kuralı ihlal eden bir kod içeriyorsa ve uyarıları hata olarak değerlendirecek şekilde yapılandırılmışsa, bu değişiklik derlemenizi bozabilir.

Kural CA1831, bir dizede tabanlı dizin Rangeoluşturucu kullanılan ancak hiçbir kopyanın amaçlanmamış olduğu örnekleri bulur. RangeTabanlı dizin oluşturucu örtük bir atama oluşturmak için doğrudan bir dize üzerinde kullanılıyorsa, dizenin istenen bölümünün gereksiz bir kopyası oluşturulur. Örneğin:

ReadOnlySpan<char> slice = str[1..3];

CA1831 bunun yerine dizenin Rangebir yayılma alanı üzerinde tabanlı dizin oluşturucunun kullanılmasını önerir. Örneğin:

ReadOnlySpan<char> slice = str.AsSpan()[1..3];

Sürüm kullanıma sunulmuştur

5.0

  • Kodunuzu düzeltmek ve gereksiz ayırmalardan kaçınmak için , -based indexer'ı kullanmadan önce veya çağrısında AsSpan(String)AsMemory(String) bulundunuz Range. Örneğin:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Kodunuzu değiştirmek istemiyorsanız, kuralın önem derecesini suggestion veya noneolarak ayarlayarak kuralı devre dışı bırakabilirsiniz. Daha fazla bilgi için bkz . Kod çözümleme kurallarını yapılandırma.

  • Kod analizini tamamen devre dışı bırakmak için proje dosyanızda olarak false ayarlayınEnableNETAnalyzers. Daha fazla bilgi için bkz . EnableNETAnalyzers.

Etkilenen API’ler