CA1845: Span tabanlı 'string' kullanın. Concat'
Özellik | Değer |
---|---|
Kural Kimliği | CA1845 |
Başlık | Span tabanlı 'string' kullanın. Concat' |
Kategori | Performans |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Öneri olarak |
Neden
Bu kural, çağrılar içeren Substring dize birleştirme ifadelerini bulur ve ile AsSpan değiştirilip Substring span tabanlı aşırı yüklemesini String.Concatkullanmayı önerir.
Kural açıklaması
Çağrılması Substring
, ayıklanan alt dizenin bir kopyasını oluşturur. yerine kullanarak AsSpan
Substring
ve spans kabul eden aşırı yüklemesini string.Concat
çağırarak, gereksiz dize ayırmayı ortadan kaldırabilirsiniz.
İhlalleri düzeltme
İhlalleri düzeltmek için:
- Dize birleştirmesini öğesine yapılan bir çağrıyla
string.Concat
değiştirin ve - için çağrılarını
Substring
çağrısıylaAsSpan
değiştirin.
Aşağıdaki kod parçacığında ihlal örnekleri ve bunların nasıl düzeltileceğini gösterilmektedir.
using System;
class Example
{
public void Method()
{
string text = "fwobz the fwutzle";
// Violation: allocations by Substring are wasteful.
string s1 = text.Substring(10) + "---" + text.Substring(0, 5);
// Fixed: using AsSpan avoids allocations of temporary strings.
string s2 = string.Concat(text.AsSpan(10), "---", text.AsSpan(0, 5));
}
}
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan gelen uyarıları gizlemeyin. Ayıklanan alt dize yalnızca span tabanlı eşdeğeri olan bir yönteme geçirilirken kullanmak AsSpan
için bir neden Substring
yoktur.