Ereignisse
17. März, 23 Uhr - 21. März, 23 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
Eigenschaft | Wert |
---|---|
Regel-ID | CA1831 |
Titel | Verwenden Sie für Zeichenfolgen bei Bedarf anstelle von Range-basierten Indexern „AsSpan“. |
Kategorie | Leistung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Warnung |
Ein Bereichs-Indexer wird für eine Zeichenfolge verwendet, und der Wert wird implizit ReadOnlySpan<char>
zugewiesen.
Diese Regel wird ausgelöst, wenn Sie einen Bereichs-Indexer für eine Zeichenfolge verwenden und diesen einem Span-Typ zuweisen. Der Bereichs-Indexer in einem Span<T> ist ein nicht-kopierfähiger Slice Vorgang, aber für den Bereichs-Indexer für eine Zeichenfolge wird anstelle von Substring die Methode Slice verwendet. Dadurch wird eine Kopie des angeforderten Teils der Zeichenfolge erstellt. Diese Kopie ist in der Regel unnötig, wenn diese implizit als ReadOnlySpan<T>- oder ReadOnlyMemory<T>-Wert verwendet wird. Wenn keine Kopie erstellt werden soll, verwenden Sie die Methode AsSpan, um unnötige Kopien zu vermeiden. Wenn die Kopie beabsichtigt ist, weisen Sie zuerst einer lokalen Variablen zu, oder fügen Sie eine explizite Umwandlung hinzu. Das Analysetool gibt nur eine Meldung aus, wenn eine implizite Umwandlung für das Ergebnis des Bereichs-Indexer-Vorgangs verwendet wird.
Implizite Konvertierung:
ReadOnlySpan<char> slice = str[a..b];
Explizite Konvertierung:
ReadOnlySpan<char> slice = (ReadOnlySpan<char>)str[a..b];
Um einen Verstoß gegen diese Regel zu beheben, verwenden Sie AsSpan anstelle des Range -basierten Indexers in der Zeichenfolge, um zu vermeiden, dass unnötige Datenkopien erstellt werden.
public void TestMethod(string str)
{
// The violation occurs
ReadOnlySpan<char> slice = str[1..3];
...
}
public void TestMethod(string str)
{
// The violation fixed with AsSpan extension method
ReadOnlySpan<char> slice = str.AsSpan()[1..3];
...
}
Tipp
Für diese Regel ist ein Codefix in Visual Studio verfügbar. Um ihn zu nutzen, muss der Cursor auf dem Verstoß platziert und Strg+. (Punkt) gedrückt werden. Wählen Sie in der Liste der angezeigten Optionen die Option AsSpan anstelle des bereichsbasierten Indexers in einer Zeichenfolge verwenden aus.
Sie können auch eine explizite Umwandlung hinzufügen, um diese Warnung zu vermeiden.
public void TestMethod(string str)
{
// The violation occurs.
ReadOnlySpan<char> slice = str[1..3];
...
}
public void TestMethod(string str)
{
// The violation avoided with explicit casting.
ReadOnlySpan<char> slice = (ReadOnlySpan<char>)str[1..3];
...
}
Es ist sicher, einen Verstoß gegen diese Regel zu unterdrücken, wenn das Erstellen einer Kopie beabsichtigt ist.
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1831
// The code that's violating the rule is on this line.
#pragma warning restore CA1831
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der none
auf fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1831.severity = none
Um diese gesamte Kategorie von Regeln zu deaktivieren, legen Sie den Schweregrad für die Kategorie in der none
auf fest.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Performance.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
17. März, 23 Uhr - 21. März, 23 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrieren