次の方法で共有


CA1834:1 文字の文字列に対して StringBuilder.Append(char) を使用する

プロパティ
ルール ID CA1834
Title 1 文字の文字列に対して StringBuilder.Append(char) を使用する
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

この規則は、単位長の文字列が 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)' の使用を検討してください] を選択します。

Code fix for CA1834 - Use StringBuilder.Append(char) for single character strings

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);
        }
    }
}

慎重に分析した後、ここでビルド エラーを発生させずに unitStringchar に変更できます。

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

詳細については、「コード分析の警告を抑制する方法」を参照してください。

関連項目