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 8'de 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 AsSpanSubstring 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:

  1. Dize birleştirmesini öğesine yapılan bir çağrıyla string.Concatdeğiştirin ve
  2. için çağrılarını Substring çağrısıyla AsSpandeğ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.

Ayrıca bkz.