Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA1845 |
| Titel | „string.Concat“ auf span-Basis verwenden |
| Kategorie | Leistung |
| Fix führt zu Unterbrechungen oder bleibt funktionsfähig | Untrennbar |
| Standardmäßig in .NET 10 aktiviert | Als Vorschlag |
| Anwendbare Sprachen | C# und Visual Basic |
Ursache
Diese Regel sucht nach Zeichenfolgenverkettungsausdrücken, die Substring-Aufrufe enthalten. Sie schlägt vor, Substring durch AsSpan zu ersetzen und die Span-basierte Überladungsfunktion von String.Concat zu verwenden.
Regelbeschreibung
Das Aufrufen von Substring erzeugt eine Kopie der extrahierten Teilzeichenfolge. Sie können die unnötige Speicherzuweisung für Zeichenfolgen vermeiden, indem Sie AsSpan anstelle von Substring verwenden und die Überladung von string.Concat aufrufen, die Spans akzeptiert.
So beheben Sie Verstöße
So beheben Sie Verstöße:
- Ersetzen Sie die Zeichenfolgenverkettung durch einen Aufruf von
string.Concat, und - Ersetzen Sie Aufrufe von
SubstringdurchAsSpan.
Der folgende Codeausschnitt zeigt Beispiele für Verstöße und deren Behebung.
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));
}
}
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnungen von dieser Regel. Es gibt keinen Grund, Substring statt AsSpan zu verwenden, wenn die extrahierte Teilzeichenfolge nur an eine span-basierte Methode übergeben wird.