Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
| Property | Value |
|---|---|
| Rule ID | CA1845 |
| Title | Use span-based 'string.Concat' |
| Category | Performance |
| Fix is breaking or non-breaking | Non-breaking |
| Enabled by default in .NET 9 | As suggestion |
Cause
This rule locates string-concatenation expressions that contain Substring calls and suggests replacing Substring with AsSpan and using the span-based overload of String.Concat.
Rule description
Calling Substring produces a copy of the extracted substring. By using AsSpan instead of Substring and calling the overload of string.Concat that accepts spans, you can eliminate the unnecessary string allocation.
How to fix violations
To fix violations:
- Replace the string concatenation with a call to
string.Concat, and - Replace calls to
Substringwith calls toAsSpan.
The following code snippet shows examples of violations, and how to fix them.
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));
}
}
When to suppress warnings
Do not suppress warnings from this rule. There is no reason to use Substring over AsSpan when the extracted substring is only being passed to a method with a span-based equivalent.