diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.md b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.md
index fd1fcef90923..439fc000c36f 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.md
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.md
@@ -1358,7 +1358,7 @@ Enumerable.Count() potentially enumerates the sequence while a Length/Count prop
## [CA1830](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1830): Prefer strongly-typed Append and Insert method overloads on StringBuilder
-StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
+StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
|Item|Value|
|-|-|
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif
index f36c59791cd4..b9092f16d745 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif
@@ -2789,7 +2789,7 @@
"CA1830": {
"id": "CA1830",
"shortDescription": "Prefer strongly-typed Append and Insert method overloads on StringBuilder",
- "fullDescription": "StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.",
+ "fullDescription": "StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).",
"defaultLevel": "note",
"helpUri": "https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1830",
"properties": {
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/MicrosoftNetCoreAnalyzersResources.resx b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/MicrosoftNetCoreAnalyzersResources.resx
index bacbfc1fe9cb..ecb112fa90b4 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/MicrosoftNetCoreAnalyzersResources.resx
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/MicrosoftNetCoreAnalyzersResources.resx
@@ -1287,14 +1287,17 @@
Prefer strongly-typed Append and Insert method overloads on StringBuilder
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
+ Prefer strongly-typed StringBuilder overloadRemove the ToString call
+
+ Use StringBuilder.Append(char, int) overload
+
Calls to 'string.IndexOf' where the result is used to check for the presence/absence of a substring can be replaced by 'string.Contains'.
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloads.Fixer.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloads.Fixer.cs
index 1f2a6bfe7ee3..7b3d67aaf86b 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloads.Fixer.cs
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloads.Fixer.cs
@@ -29,26 +29,59 @@ public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
SyntaxNode root = await doc.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
if (root.FindNode(context.Span) is SyntaxNode expression)
{
- string title = MicrosoftNetCoreAnalyzersResources.PreferTypedStringBuilderAppendOverloadsRemoveToString;
- context.RegisterCodeFix(
- CodeAction.Create(title,
- async ct =>
- {
- SemanticModel model = await doc.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
- if (model.GetOperationWalkingUpParentChain(expression, cancellationToken) is IArgumentOperation arg &&
- arg.Value is IInvocationOperation invoke &&
- invoke.Instance?.Syntax is SyntaxNode replacement)
+ SemanticModel model = await doc.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
+ var operation = model.GetOperationWalkingUpParentChain(expression, cancellationToken);
+
+ // Handle ToString() case
+ if (operation is IArgumentOperation arg &&
+ arg.Value is IInvocationOperation invoke &&
+ invoke.Instance?.Syntax is SyntaxNode replacement)
+ {
+ string title = MicrosoftNetCoreAnalyzersResources.PreferTypedStringBuilderAppendOverloadsRemoveToString;
+ context.RegisterCodeFix(
+ CodeAction.Create(title,
+ async ct =>
{
DocumentEditor editor = await DocumentEditor.CreateAsync(doc, ct).ConfigureAwait(false);
editor.ReplaceNode(expression, editor.Generator.Argument(replacement));
return editor.GetChangedDocument();
- }
+ },
+ equivalenceKey: title),
+ context.Diagnostics);
+ }
+ // Handle new string(char, int) case (only for Append, not Insert)
+ else if (operation is IArgumentOperation argOp &&
+ argOp.Value is IObjectCreationOperation objectCreation &&
+ objectCreation.Arguments.Length == 2 &&
+ argOp.Parent is IInvocationOperation invocationOp &&
+ invocationOp.TargetMethod.Name == "Append")
+ {
+ string title = MicrosoftNetCoreAnalyzersResources.PreferTypedStringBuilderAppendOverloadsReplaceStringConstructor;
+ context.RegisterCodeFix(
+ CodeAction.Create(title,
+ async ct =>
+ {
+ DocumentEditor editor = await DocumentEditor.CreateAsync(doc, ct).ConfigureAwait(false);
- return doc;
- },
- equivalenceKey: title),
- context.Diagnostics);
+ // Get the char and int arguments from the string constructor
+ var charArgSyntax = objectCreation.Arguments[0].Value.Syntax;
+ var intArgSyntax = objectCreation.Arguments[1].Value.Syntax;
+
+ // Append(new string(c, count)) -> Append(c, count)
+ SyntaxNode newInvocation = editor.Generator.InvocationExpression(
+ editor.Generator.MemberAccessExpression(
+ invocationOp.Instance!.Syntax,
+ "Append"),
+ editor.Generator.Argument(charArgSyntax),
+ editor.Generator.Argument(intArgSyntax));
+
+ editor.ReplaceNode(invocationOp.Syntax, newInvocation);
+ return editor.GetChangedDocument();
+ },
+ equivalenceKey: title),
+ context.Diagnostics);
+ }
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloads.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloads.cs
index 632356ea00b0..af60c5b9dc03 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloads.cs
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloads.cs
@@ -65,6 +65,16 @@ public sealed override void Initialize(AnalysisContext context)
s.Parameters[1].Type.SpecialType != SpecialType.System_Object &&
s.Parameters[1].Type.TypeKind != TypeKind.Array);
+ // Get the Append(char, int) overload for the string constructor pattern.
+ // Note: There is no Insert(int, char, int) overload, so we only handle Append.
+ var appendCharIntMethod = stringBuilderType
+ .GetMembers("Append")
+ .OfType()
+ .FirstOrDefault(s =>
+ s.Parameters.Length == 2 &&
+ s.Parameters[0].Type.SpecialType == SpecialType.System_Char &&
+ s.Parameters[1].Type.SpecialType == SpecialType.System_Int32);
+
// Get the StringBuilder.Append(string)/Insert(int, string) method, for comparison purposes.
var appendStringMethod = appendMethods.FirstOrDefault(s =>
s.Parameters[0].Type.SpecialType == SpecialType.System_String);
@@ -97,28 +107,43 @@ public sealed override void Initialize(AnalysisContext context)
return;
}
- // We're only interested if the string argument is a "string ToString()" call.
if (invocation.Arguments.Length != stringParamIndex + 1 ||
- invocation.Arguments[stringParamIndex] is not IArgumentOperation argument ||
- argument.Value is not IInvocationOperation toStringInvoke ||
- toStringInvoke.TargetMethod.Name != "ToString" ||
- toStringInvoke.Type?.SpecialType != SpecialType.System_String ||
- !toStringInvoke.TargetMethod.Parameters.IsEmpty)
+ invocation.Arguments[stringParamIndex] is not IArgumentOperation argument)
{
return;
}
- // We're only interested if the receiver type of that ToString call has a corresponding strongly-typed overload.
- IMethodSymbol? stronglyTypedAppend =
- (stringParamIndex == 0 ? appendMethods : insertMethods)
- .FirstOrDefault(s => s.Parameters[stringParamIndex].Type.Equals(toStringInvoke.TargetMethod.ReceiverType));
- if (stronglyTypedAppend is null)
+ // Check if the string argument is a "string ToString()" call.
+ if (argument.Value is IInvocationOperation toStringInvoke &&
+ toStringInvoke.TargetMethod.Name == "ToString" &&
+ toStringInvoke.Type?.SpecialType == SpecialType.System_String &&
+ toStringInvoke.TargetMethod.Parameters.IsEmpty)
{
- return;
- }
+ // We're only interested if the receiver type of that ToString call has a corresponding strongly-typed overload.
+ IMethodSymbol? stronglyTypedAppend =
+ (stringParamIndex == 0 ? appendMethods : insertMethods)
+ .FirstOrDefault(s => s.Parameters[stringParamIndex].Type.Equals(toStringInvoke.TargetMethod.ReceiverType));
+ if (stronglyTypedAppend is null)
+ {
+ return;
+ }
- // Warn.
- operationContext.ReportDiagnostic(toStringInvoke.CreateDiagnostic(Rule));
+ // Warn.
+ operationContext.ReportDiagnostic(toStringInvoke.CreateDiagnostic(Rule));
+ }
+ // Check if the string argument is a "new string(char, int)" constructor call.
+ // Note: This optimization only applies to Append, not Insert, as there's no Insert(int, char, int) overload.
+ else if (stringParamIndex == 0 &&
+ argument.Value is IObjectCreationOperation objectCreation &&
+ objectCreation.Type?.SpecialType == SpecialType.System_String &&
+ objectCreation.Arguments.Length == 2 &&
+ objectCreation.Arguments[0].Value?.Type?.SpecialType == SpecialType.System_Char &&
+ objectCreation.Arguments[1].Value?.Type?.SpecialType == SpecialType.System_Int32 &&
+ appendCharIntMethod is not null)
+ {
+ // Warn.
+ operationContext.ReportDiagnostic(objectCreation.CreateDiagnostic(Rule));
+ }
}, OperationKind.Invocation);
});
}
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf
index 547cfec47e45..4c369a1a34ad 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf
@@ -2314,13 +2314,13 @@ Rozšíření a uživatelem definované převody se u obecných typů nepodporuj
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append a StringBuilder.Insert nabízejí přetížení kromě System.String i několika dalším typům. Kdykoli je to možné, upřednostňujte před metodou ToString() přetížení silného typu a přetížení založené na řetězcích.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append a StringBuilder.Insert nabízejí přetížení kromě System.String i několika dalším typům. Kdykoli je to možné, upřednostňujte před metodou ToString() přetížení silného typu a přetížení založené na řetězcích.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Odeberte volání ToString, aby se používalo přetížení StringBuilder silného typu.
+ Prefer strongly-typed StringBuilder overload
+ Odeberte volání ToString, aby se používalo přetížení StringBuilder silného typu.
@@ -2328,6 +2328,11 @@ Rozšíření a uživatelem definované převody se u obecných typů nepodporuj
Odeberte volání ToString.
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderUpřednostňovat pro StringBuilder přetížení metod Append a Insert silného typu
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf
index a13fa704ba8f..90c525590d5a 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf
@@ -2314,13 +2314,13 @@ Erweiterungen und benutzerdefinierte Konvertierungen werden bei generischen Type
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append und StringBuilder.Insert stellen Überladungen für verschiedene Typen über System.String hinaus bereit. Sofern möglich, geben Sie den stark typisierten Überladungen Vorrang vor einer Verwendung von ToString() und zeichenfolgenbasierten Überladungen.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append und StringBuilder.Insert stellen Überladungen für verschiedene Typen über System.String hinaus bereit. Sofern möglich, geben Sie den stark typisierten Überladungen Vorrang vor einer Verwendung von ToString() und zeichenfolgenbasierten Überladungen.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Entfernen Sie den Aufruf von "ToString", um eine stark typisierte StringBuilder-Überladung zu verwenden.
+ Prefer strongly-typed StringBuilder overload
+ Entfernen Sie den Aufruf von "ToString", um eine stark typisierte StringBuilder-Überladung zu verwenden.
@@ -2328,6 +2328,11 @@ Erweiterungen und benutzerdefinierte Konvertierungen werden bei generischen Type
ToString-Aufruf entfernen
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderStark typisierte Append- und Insert-Methodenüberladungen für StringBuilder bevorzugen
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf
index 1c86fe791114..b49c63330fec 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf
@@ -2314,13 +2314,13 @@ La ampliación y las conversiones definidas por el usuario no se admiten con tip
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append y StringBuilder.Insert proporcionan sobrecargas para varios tipos aparte de System.String. Cuando sea posible, elija preferentemente las sobrecargas fuertemente tipadas frente al uso de ToString() y la sobrecarga basada en cadenas.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append y StringBuilder.Insert proporcionan sobrecargas para varios tipos aparte de System.String. Cuando sea posible, elija preferentemente las sobrecargas fuertemente tipadas frente al uso de ToString() y la sobrecarga basada en cadenas.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Quite la llamada a ToString para usar una sobrecarga StringBuilder fuertemente tipada.
+ Prefer strongly-typed StringBuilder overload
+ Quite la llamada a ToString para usar una sobrecarga StringBuilder fuertemente tipada.
@@ -2328,6 +2328,11 @@ La ampliación y las conversiones definidas por el usuario no se admiten con tip
Quitar la llamada a ToString
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderPrefiera las sobrecargas de método Append e Insert fuertemente tipadas en StringBuilder
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf
index 36c5534b8962..22b8df630ee8 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf
@@ -2314,13 +2314,13 @@ Les conversions étendues et définies par l’utilisateur ne sont pas prises en
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append et StringBuilder.Insert fournissent des surcharges pour plusieurs types au-delà de System.String. Quand cela est possible, préférez les surcharges fortement typées à l'utilisation de ToString() et de la surcharge basée sur une chaîne.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append et StringBuilder.Insert fournissent des surcharges pour plusieurs types au-delà de System.String. Quand cela est possible, préférez les surcharges fortement typées à l'utilisation de ToString() et de la surcharge basée sur une chaîne.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Supprimez l'appel de ToString pour utiliser une surcharge StringBuilder fortement typée
+ Prefer strongly-typed StringBuilder overload
+ Supprimez l'appel de ToString pour utiliser une surcharge StringBuilder fortement typée
@@ -2328,6 +2328,11 @@ Les conversions étendues et définies par l’utilisateur ne sont pas prises en
Supprimer l'appel de ToString
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderPréférez les surcharges de méthode Append et Insert fortement typées sur StringBuilder
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf
index 6c3d97692a3c..d08e490095a6 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf
@@ -2314,13 +2314,13 @@ L'ampliamento e le conversioni definite dall'utente non sono supportate con tipi
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append e StringBuilder.Insert forniscono overload per più tipi oltre System.String. Quando possibile, preferire gli overload fortemente tipizzati invece di usare ToString() e l'overload basato su stringhe.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append e StringBuilder.Insert forniscono overload per più tipi oltre System.String. Quando possibile, preferire gli overload fortemente tipizzati invece di usare ToString() e l'overload basato su stringhe.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Rimuovere la chiamata ToString per usare un overload di StringBuilder fortemente tipizzato
+ Prefer strongly-typed StringBuilder overload
+ Rimuovere la chiamata ToString per usare un overload di StringBuilder fortemente tipizzato
@@ -2328,6 +2328,11 @@ L'ampliamento e le conversioni definite dall'utente non sono supportate con tipi
Rimuovere la chiamata a ToString
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderPreferire gli overload di metodi Append e Insert fortemente tipizzati su StringBuilder
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf
index 8c4aa8a20ea1..097b635e9e1d 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf
@@ -2314,13 +2314,13 @@ Enumerable.OfType<T> で使用されるジェネリック型チェック (
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append および StringBuilder.Insert では、System.String 以外の複数の型に対してオーバーロードを提供します。可能であれば、ToString () と文字列ベースのオーバーロードを使用するよりも、厳密に型指定されたオーバーロードを優先して使用することをお勧めします。
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append および StringBuilder.Insert では、System.String 以外の複数の型に対してオーバーロードを提供します。可能であれば、ToString () と文字列ベースのオーバーロードを使用するよりも、厳密に型指定されたオーバーロードを優先して使用することをお勧めします。
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- 厳密に型指定された StringBuilder のオーバーロードを使用するには、ToString 呼び出しを削除してください
+ Prefer strongly-typed StringBuilder overload
+ 厳密に型指定された StringBuilder のオーバーロードを使用するには、ToString 呼び出しを削除してください
@@ -2328,6 +2328,11 @@ Enumerable.OfType<T> で使用されるジェネリック型チェック (
ToString 呼び出しを削除する
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderStringBuilder での厳密に型指定された Append および Insert メソッドのオーバーロードを推奨
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf
index 47929d1c21f5..07f1595a9512 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf
@@ -2314,13 +2314,13 @@ Enumerable.OfType<T>에서 사용하는 제네릭 형식 검사(C# 'is'
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append 및 StringBuilder.Insert는 System.String 외의 여러 형식에 대한 오버로드를 제공합니다. 가능한 경우 ToString() 및 문자열 기반 오버로드를 사용하는 대신 강력한 형식의 오버로드를 사용하세요.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append 및 StringBuilder.Insert는 System.String 외의 여러 형식에 대한 오버로드를 제공합니다. 가능한 경우 ToString() 및 문자열 기반 오버로드를 사용하는 대신 강력한 형식의 오버로드를 사용하세요.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- 강력한 형식의 StringBuilder 오버로드를 사용하려면 ToString 호출을 제거하세요.
+ Prefer strongly-typed StringBuilder overload
+ 강력한 형식의 StringBuilder 오버로드를 사용하려면 ToString 호출을 제거하세요.
@@ -2328,6 +2328,11 @@ Enumerable.OfType<T>에서 사용하는 제네릭 형식 검사(C# 'is'
ToString 호출 제거
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderStringBuilder 대신 강력한 형식의 Append 및 Insert 메서드 오버로드를 사용
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf
index f8c701db54b3..2572ec0b17a9 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf
@@ -2314,13 +2314,13 @@ Konwersje poszerzane i zdefiniowane przez użytkownika nie są obsługiwane w pr
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- Metody StringBuilder.Append i StringBuilder.Insert zapewniają przeciążenia dla wielu typów oprócz typu System.String. Jeśli to możliwe, preferuj silnie typizowane przeciążenia zamiast używania metody ToString() i przeciążenia opartego na ciągu.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ Metody StringBuilder.Append i StringBuilder.Insert zapewniają przeciążenia dla wielu typów oprócz typu System.String. Jeśli to możliwe, preferuj silnie typizowane przeciążenia zamiast używania metody ToString() i przeciążenia opartego na ciągu.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Usuń wywołanie metody ToString, aby użyć silnie typizowanego przeciążenia elementu StringBuilder
+ Prefer strongly-typed StringBuilder overload
+ Usuń wywołanie metody ToString, aby użyć silnie typizowanego przeciążenia elementu StringBuilder
@@ -2328,6 +2328,11 @@ Konwersje poszerzane i zdefiniowane przez użytkownika nie są obsługiwane w pr
Usuń wywołanie metody ToString
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderPreferuj silnie typizowane metody Append i Insert w elemencie StringBuilder
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf
index 71cde1d01b0c..97ddcd0d13ae 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf
@@ -2314,13 +2314,13 @@ As ampliação e conversões definidas pelo usuário não são compatíveis com
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append e StringBuilder.Insert fornecem sobrecargas para vários tipos além de System.String. Quando possível, prefira as sobrecargas fortemente tipadas usando ToString() e a sobrecarga baseada em cadeia de caracteres.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append e StringBuilder.Insert fornecem sobrecargas para vários tipos além de System.String. Quando possível, prefira as sobrecargas fortemente tipadas usando ToString() e a sobrecarga baseada em cadeia de caracteres.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Remova a chamada ToString para usar uma sobrecarga de StringBuilder fortemente tipada
+ Prefer strongly-typed StringBuilder overload
+ Remova a chamada ToString para usar uma sobrecarga de StringBuilder fortemente tipada
@@ -2328,6 +2328,11 @@ As ampliação e conversões definidas pelo usuário não são compatíveis com
Remover a chamada ToString
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderPrefira sobrecargas de método Append e Insert fortemente tipadas no StringBuilder
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf
index 355273e1bf08..338141e13c7d 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf
@@ -2314,13 +2314,13 @@ Widening and user defined conversions are not supported with generic types.
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append и StringBuilder.Insert предоставляют перегрузки для нескольких типов наряду с System.String. Если это возможно, рекомендуется использовать строго типизированные перегрузки и перегрузки на основе строк вместо метода ToString().
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append и StringBuilder.Insert предоставляют перегрузки для нескольких типов наряду с System.String. Если это возможно, рекомендуется использовать строго типизированные перегрузки и перегрузки на основе строк вместо метода ToString().
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Удалите вызов ToString и используйте строго типизированную перегрузку StringBuilder.
+ Prefer strongly-typed StringBuilder overload
+ Удалите вызов ToString и используйте строго типизированную перегрузку StringBuilder.
@@ -2328,6 +2328,11 @@ Widening and user defined conversions are not supported with generic types.Удалите вызов ToString
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderРекомендация использовать строго типизированные перегрузки методов Append и Insert в StringBuilder
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf
index 33786bf42bc7..b82481f6234f 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf
@@ -2314,13 +2314,13 @@ Genel türlerde genişletme ve kullanıcı tanımlı dönüştürmeler desteklen
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append ve StringBuilder.Insert, System.String'in ötesinde birden çok türe yönelik aşırı yükleme sağlar. Mümkün olduğunda, ToString() ve dize tabanlı aşırı yüklemeyi kullanmak yerine kesin tür belirtilmiş aşırı yüklemeleri tercih edin.
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append ve StringBuilder.Insert, System.String'in ötesinde birden çok türe yönelik aşırı yükleme sağlar. Mümkün olduğunda, ToString() ve dize tabanlı aşırı yüklemeyi kullanmak yerine kesin tür belirtilmiş aşırı yüklemeleri tercih edin.
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- Kesin tür belirtilmiş bir StringBuilder aşırı yüklemesi kullanmak için ToString çağrısını kaldırın
+ Prefer strongly-typed StringBuilder overload
+ Kesin tür belirtilmiş bir StringBuilder aşırı yüklemesi kullanmak için ToString çağrısını kaldırın
@@ -2328,6 +2328,11 @@ Genel türlerde genişletme ve kullanıcı tanımlı dönüştürmeler desteklen
ToString çağrısını kaldırın
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilderStringBuilder'da kesin tür belirtilmiş Append ve Insert metodu aşırı yüklemelerini tercih edin
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf
index c9ff6d540e03..ba0e7cc20a7c 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf
@@ -2314,13 +2314,13 @@ Enumerable.OfType<T> 使用的泛型类型检查(C# 'is' operator/IL 'isin
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append 和 StringBuilder.Insert 为 System.String 之外的多种类型提供重载。在可能情况下,尽量使用强类型重载而非使用 ToString() 和基于字符串的重载。
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append 和 StringBuilder.Insert 为 System.String 之外的多种类型提供重载。在可能情况下,尽量使用强类型重载而非使用 ToString() 和基于字符串的重载。
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- 删除 ToString 调用以使用强类型 StringBuilder 重载
+ Prefer strongly-typed StringBuilder overload
+ 删除 ToString 调用以使用强类型 StringBuilder 重载
@@ -2328,6 +2328,11 @@ Enumerable.OfType<T> 使用的泛型类型检查(C# 'is' operator/IL 'isin
删除 ToString 调用
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilder最好使用 StringBuilder 的强类型 Append 和 Insert 方法重载
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf
index 96185b9b1822..edd8080c702f 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf
@@ -2314,13 +2314,13 @@ Enumerable.OfType<T> 使用的一般型別檢查 (C# 'is' operator/IL 'isi
- StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload.
- StringBuilder.Append 與 StringBuilder.Insert 可為 System.String 以外的多種類型提供多載。建議盡可能使用強型別多載,而非 ToString() 與字串式多載。
+ StringBuilder.Append and StringBuilder.Insert provide overloads for multiple types beyond System.String. When possible, prefer the strongly-typed overloads over using ToString() and the string-based overload. Additionally, prefer Append(char, int) over Append(new string(char, int)).
+ StringBuilder.Append 與 StringBuilder.Insert 可為 System.String 以外的多種類型提供多載。建議盡可能使用強型別多載,而非 ToString() 與字串式多載。
- Remove the ToString call in order to use a strongly-typed StringBuilder overload
- 移除 ToString 呼叫,以使用強型別 StringBuilder 多載
+ Prefer strongly-typed StringBuilder overload
+ 移除 ToString 呼叫,以使用強型別 StringBuilder 多載
@@ -2328,6 +2328,11 @@ Enumerable.OfType<T> 使用的一般型別檢查 (C# 'is' operator/IL 'isi
移除 ToString 呼叫
+
+ Use StringBuilder.Append(char, int) overload
+ Use StringBuilder.Append(char, int) overload
+
+ Prefer strongly-typed Append and Insert method overloads on StringBuilder建議在 StringBuilder 上使用強型別 Append 及 Insert 方法多載
diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloadsTests.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloadsTests.cs
index ec32a3f8cbfa..04064c09f233 100644
--- a/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloadsTests.cs
+++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Runtime/PreferTypedStringBuilderAppendOverloadsTests.cs
@@ -260,5 +260,82 @@ private static void Append(string value) { }
private static void Append(int value) { }
}");
}
+
+ [Fact]
+ public async Task Diagnostic_StringConstructorInAppend_CSharpAsync()
+ {
+ await VerifyCS.VerifyCodeFixAsync(@"
+ using System.Text;
+
+ class C
+ {
+ public void M()
+ {
+ var sb = new StringBuilder();
+ sb.Append([|new string('c', 5)|]);
+ }
+ }
+ ", @"
+ using System.Text;
+
+ class C
+ {
+ public void M()
+ {
+ var sb = new StringBuilder();
+ sb.Append('c', 5);
+ }
+ }
+ ");
+ }
+
+ [Fact]
+ public async Task Diagnostic_StringConstructorWithVariable_CSharpAsync()
+ {
+ await VerifyCS.VerifyCodeFixAsync(@"
+ using System.Text;
+
+ class C
+ {
+ public void M()
+ {
+ var sb = new StringBuilder();
+ char c = 'a';
+ int count = 3;
+ sb.Append([|new string(c, count)|]);
+ }
+ }
+ ", @"
+ using System.Text;
+
+ class C
+ {
+ public void M()
+ {
+ var sb = new StringBuilder();
+ char c = 'a';
+ int count = 3;
+ sb.Append(c, count);
+ }
+ }
+ ");
+ }
+
+ [Fact]
+ public async Task NoDiagnostic_StringConstructorWithCharArray_CSharpAsync()
+ {
+ await VerifyCS.VerifyAnalyzerAsync(@"
+ using System.Text;
+
+ class C
+ {
+ public void M()
+ {
+ var sb = new StringBuilder();
+ char[] chars = new char[] { 'a', 'b', 'c' };
+ sb.Append(new string(chars));
+ }
+ }");
+ }
}
}