CA1834:1 文字の文字列に対して StringBuilder.Append(char) を使用する
プロパティ | 値 |
---|---|
ルール ID | CA1834 |
Title | 1 文字の文字列に対して StringBuilder.Append(char) を使用する |
[カテゴリ] | パフォーマンス |
修正が中断ありか中断なしか | なし |
.NET 9 では既定で有効 | 提案として |
原因
この規則は、単位長の文字列が Append メソッドに渡されたときに適用されます。
規則の説明
単位長の文字列を指定して StringBuilder.Append
を呼び出す場合は、パフォーマンスを向上させるために単位長 const string
ではなく const char
を使用することを検討してください。
違反の修正方法
違反は手動で修正するか、場合によっては、Visual Studio でクイック アクションを使用してコードを修正することができます。 例 :
例 1
単位長の文字列リテラルを使用した StringBuilder.Append
の呼び出し:
using System;
using System.Text;
namespace TestNamespace
{
class TestClass
{
private void TestMethod()
{
StringBuilder sb = new StringBuilder();
sb.Append("a");
}
}
}
ヒント
Visual Studio では、この規則に対するコード修正を使用できます。 これを使用するには、違反にカーソルを置き、Ctrl+. (ピリオド) を押します。 表示されるオプションの一覧から [該当する場合は 'StringBuilder. Append (char)' の使用を検討してください] を選択します。
Visual Studio によって適用される修正:
using System;
using System.Text;
namespace TestNamespace
{
class TestClass
{
private void TestMethod()
{
StringBuilder sb = new StringBuilder();
sb.Append('a');
}
}
}
場合によっては (たとえば単位長 const string
クラス フィールドを使用した場合)、Visual Studio によってコード修正が提案されないことがあります (ただし、アナライザーは起動されます)。 これらの場合は、手動で修正する必要があります。
例 2
単位長の const string
クラス フィールドを使用した StringBuilder.Append
の呼び出し:
using System;
using System.Text;
namespace TestNamespace
{
public class Program
{
public const string unitString = "a";
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
sb.Append(unitString);
}
}
}
慎重に分析した後、ここでビルド エラーを発生させずに unitString
を char
に変更できます。
using System;
using System.Text;
namespace TestNamespace
{
public class Program
{
public const char unitString = 'a';
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
sb.Append(unitString);
}
}
}
どのようなときに警告を抑制するか
StringBuilder
を使用してもパフォーマンスへの影響が懸念されない場合は、この規則違反を抑制しても問題ありません。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA1834
// The code that's violating the rule is on this line.
#pragma warning restore CA1834
ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA1834.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
関連項目
.NET