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 Range tabanlı dizinleyici metin üzerinde kullanılmış ancak kopyalama amaçlanmamışsa, tüm kodlar için bir derleme süreci uyarısı oluşturur.

Açıklamayı değiştir

.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, string üzerinde Range tabanlı dizinleyici kullanıldığında, kopyalama amacı taşımayan örnekleri bulur. Range tabanlı dizin oluşturucu, doğrudan bir dizenin üzerinde kullanılarak örtük bir dönüşüm yapıldığında, dizenin istenen kısmının gereksiz bir kopyası oluşturulur. Örneğin:

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

CA1831 bunun yerine dizenin bir Range içinden 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, AsSpan(String) veya AsMemory(String) çağrısını yapmadan önce Range tabanlı indeksleyici kullanın. Ö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 EnableNETAnalyzers öğesini false olarak ayarlayın. Daha fazla bilgi için bkz . EnableNETAnalyzers.

Etkilenen API'ler