ReSharper 2026.1 Help

文字列リテラルのコード分析とヘルパー

プレーン文字列

こちらは、コードでプレーンな文字列を扱う際に ReSharper がどのように役立つかの説明です:

  • デフォルトでは、ReSharper はすべての非逐語的文字列において、正しいエスケープシーケンスと誤ったエスケープシーケンスをハイライトします:

    文字列中のエスケープシーケンスのハイライト

  • キャレットが文字列内にあるときに Alt+Enter を押し、対応する コンテキストアクション を選択することで、通常の文字列を逐語的な文字列に変換したり、元に戻したりできます。 これは、補間された文字列でも機能します。

  • 文字列リテラルを分割するには、 Enter を押すだけです。

  • 文字列に正規表現が含まれている場合、ReSharper はその構文とエラーをハイライトし、式内でのコード補完をサポートします。 詳細については、 正規表現の支援 を参照してください。

    同様に、ReSharper に文字列リテラル内の HTML を分析させることができます。 ReSharper に文字列リテラル内の特定の言語を認識させるには、対応する コンテキストアクション を使用するか、文字列リテラルの直前にコメント /*language=regexp|jsregexp|html*/ を追加します。

  • 文字列内の一部の部分文字列を選択し、自動的に 部分文字列の変数を導入できます。

  • プロジェクトがローカライズ可能であれば、自動的に 文字列を resource に移動できます。

システム文字列のフォーマット方法

ReSharper は、 String.FormatText.StringBuilder.AppendFormatConsole.WriteLine など、すべての .NET 文字列フォーマットメソッドのフォーマット文字列と引数を分析します。

文字列フォーマットメソッドの使用時、ReSharper はプレースホルダーの書式設定をハイライトし、キャレットがそれぞれにある場合はプレースホルダーの書式設定と対応する引数を同期的にハイライトします:

文字列フォーマットの引数とプレースホルダのハイライト

引数とプレースホルダーの書式設定が一致しない場合(引数が不足していると実行時に FormatException につながります)、ReSharper は不足または冗長な引数に対して警告を生成する:

文字列フォーマットメソッドの引数の欠落に関する警告

この問題は、警告の上で Alt+Enter を押すことで簡単に解決できます。 ReSharper は、不足している引数を自動的に追加するか、一致しないプレースホルダーの書式設定を削除することを提案します。

ReSharper はまた、他の文字列フォーマットメソッド内で冗長な文字列フォーマットメソッドの呼び出しを検出して削除するのに役立ちます。 たとえば、次のようになります。

文字列フォーマットメソッドへの冗長呼び出し

文字列リテラルおよび変数の連結をすばやく変換するには、連結内の任意の位置で Alt+Enter を押し、 To String.Format の呼び出し コンテキストアクション を使用します。 例: このコンテキストアクションを次のメソッドの return ステートメントに適用する

public string Greet(string name, int age) { return "Hi, my name is " + name + " and I'm " + age; }

それは次のように変換されます:

public string Greet(string name, int age) { return String.Format("Hi, my name is {0} and I'm {1}", name, age); }

また、コンテキストアクションを使用して、文字列の書式プレースホルダと引数を自動的に追加または削除することもできます。 文字列リテラル内で フォーマット引数を挿入する アクションを呼び出すと、ReSharper は適切なインデックスを持つ新しいプレースホルダーを挿入し、すぐに引数の入力を開始できる位置へ移動します。 このアクションはプレーンな文字列でも呼び出すことができます。 この場合、ReSharper は自動で String.Format 呼び出しへ変換します。

フォーマットプレースホルダーを対応する引数とともにすばやく削除するには、キャレットをプレースホルダーに置き、 Alt+Enter を押して、 フォーマット引数を削除する を選択します。

カスタム文字列フォーマットメソッドの場合

カスタム文字列フォーマットメソッドでコード分析および支援機能を有効にするには、 JetBrains.Annotations 名前空間[StringFormatMethod] および [StructuredMessageTemplate] 属性を使用します。

カスタム文字列フォーマットメソッド ShowError を考えてみましょう。

public void ShowError(string formatString, params object[] args) { // some custom logic Console.WriteLine(formatString, args); }

下記のようにメソッドが正しく呼び出されていない場合、ReSharper は不足している引数を検出できません:

誤って呼び出された文字列フォーマットメソッド

ReSharper にカスタム文字列フォーマット方法を認識させる

  1. JetBrains.Annotations 名前空間を参照するには、 ソースコードのアノテーション セクションを参照してください。

  2. カスタム文字列フォーマットメソッドに [StringFormatMethodAttribute] 属性を注釈します。この属性はフォーマット文字列パラメーターの名前を一つだけ引数に取ります:

    [StringFormatMethod("formatString")] public void ShowError(string formatString, params object[] args) { // some custom logic Console.WriteLine(formatString, args); }

    このカスタムフォーマットメソッドが呼び出された際、ReSharper は引数の不足を警告できるようになります。 さらに、 引数の追加 クイックフィックスを使用すると、挿入が簡単になります。

    文字列フォーマットメソッドコールのクイックフィックス
  3. あるいは、フォーマットされた文字列を受け入れるパラメーターに [StructuredMessageTemplateAttribute] のアノテーションを付けます。

    void LogNewUser([StructuredMessageTemplate] string message, params string[] args) { // Log new user } void Test() { // Warning: Non-existing argument in format string LogNewUser("User created: {username}"); }

    この 2 番目のアプローチでは、上の例の username のように、カスタム文字列をプレースホルダーとして使用できます。

補間された文字列

C# の最新バージョンは、 String.Format メソッドのより洗練された代替手段である 補間文字列を提供します。 そのため、ReSharper は String.Format の使用箇所をハイライトし、補間文字列への変換を提案します。 クイックフィックスを使用して、現在の使用箇所または 特定の範囲内のすべての使用箇所に対して、数回のキーストロークで変換を適用できます。

ReSharper: String.Format の使用箇所を文字列補間に変換する

補間された文字列に式が含まれていない場合、ReSharper は $ 記号を重複してハイライトし、削除できます。

ReSharper: パラメーターを持たない文字列補間を文字列リテラルに変換する

文字列の入力に没頭しているときに、文字列の先頭に $ をすばやく追加する必要がある場合は、 Alt+Enter を押して 文字列補間へ変換する を選択できます。

その後、 補間引数を挿入する を選択すると、ReSharper はキャレットの位置に引数プレースホルダー { } を追加します。

ReSharper: 単純な文字列を文字列補間に変換する
2026 年 6 月 12 日