ReSharper 2021.1 ヘルプ

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

ReSharper は、コード内の文字列リテラルに多数の機能を提供します。ReSharper のコード分析と多数のヘルパーから次のメリットを得ることができます。

プレーンな文字列

コードにプレーンな文字列を使って作業しているときに ReSharper がどのように役立つかは次のとおりです。

  • デフォルトでは、ReSharper は、すべての非逐語的な文字列の正しいおよび不正なエスケープシーケンスをハイライトします。

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

  • Enter を押すだけで、文字列リテラルを分割できます

  • 文字列に正規表現が含まれている場合、ReSharper はその構文とエラーをハイライトし、式内のコード補完を支援します。詳細については、正規表現のアシスタンスを参照してください。
    同様に、ReSharper に HTML を文字列リテラルで分析させることができます。ReSharper に文字列リテラル内の特定の言語を認識させるには、対応するコンテキストアクションを使用するか、文字列リテラルの直前にコメント /*language=regexp|jsregexp|html*/ を追加します。

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

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

文字列のフォーマットメソッド

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

文字列フォーマットの使い方では、ReSharper はフォーマットプレースホルダをハイライトし、キャレットがそのいずれかにあるときにプレースホルダと対応する引数を同期的にハイライト表示します。

Highlighting of arguments and placeholders in string formatting methods

引数とフォーマットプレースホルダが一致しない場合(引数がない場合は実行時に FormatException につながります)、ReSharper は欠落しているか重複している引数に対して警告を生成します。

Warning for missing arguments in string formatting methods

警告よりも Alt+Enter を押すと、この問題を簡単に修正できます。ReSharper は、不足している引数を自動的に追加するか、不一致のフォーマットプレースホルダを削除するかのどちらかを提案します。

ReSharper はまた、他の文字列フォーマットメソッドの中で、文字列フォーマットメソッドの冗長な呼び出しを検出して削除できます。例:

Redundant call to string formatting method

文字列リテラルと変数の連結をすばやく変換するには、連結内の任意の場所で 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 を押してフォーマット引数を削除するを選択します。

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

カスタム文字列フォーマットメソッドが表示されたら、ReSharper にそのように解釈するように指示する必要があります。これは非常に簡単です。JetBrains.Annotations 名前空間[StringFormatMethodAttribute] でメソッドを装飾する必要があります。メソッドにこの属性が設定されるとすぐに、標準のフォーマットメソッドで使用できるすべての機能を利用できます

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

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

以下に示すように、メソッドが誤って呼び出された場合、ReSharper は欠落している引数を検出する機会がありません。

String formatting method called incorrectly

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

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

  2. [StringFormatMethodAttribute] 属性を使用して、カスタム文字列フォーマットメソッドにアノテーションを付けます。これは、単一の引数、つまり書式文字列パラメーターの名前をとります。

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

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

Quick-fix for the string formatting method call

補間された文字列

プロジェクトで C# 6.0 を使用している場合は、String.Format メソッドの代わりに補間文字列(英語)を使用できます。

デフォルトでは、ReSharper は、関連付けられたコンパイラーに基づいて C# バージョンを自動的に検出します。ただし、ターゲットの C# バージョンを明示的に指定できます。ソリューションエクスプローラーでプロジェクトを右クリックし、コンテキストメニューからプロジェクト項目のプロパティを編集するを選択して、C# 言語レベルセレクターを使用します。

C# 6.0 プロジェクトでは、ReSharper が String.Format の使用箇所を強調し、補間文字列に変換することを提案します。クイックフィックスを使用して、現在の使用箇所または特定の範囲内のすべての使用箇所を 2、3 のキーストロークで変換できます。

ReSharper: Converting a usage of String.Format into string interpolation

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

ReSharper: Converting string interpolation without parameters into string literal

文字列を入力するとき、文字列の先頭に $ をすばやく追加する必要がある場合は、Alt+Enter を押して文字列補間を選択できます。
次に、補間された引数を挿入するを選択して、ReSharper がキャレット位置に引数プレースホルダー { } を追加することもできます。

ReSharper: Converting simple string to string interpolation

関連ページ:

コンテキストアクション | ReSharper

コンテキストアクションは、エディターで直接利用できるコード変換ヘルパーです。クイックフィックスとは対照的に、コンテキストアクションは問題の解決やコードの改善を目的としているためはなく、アクセス修飾子の変更、null をチェックするコードの生成、'foreach' の 'for' への変換などの小さな変更を素早く導入できます。ReSharper は、サポートされているすべての言語で数百のコンテキストアクションを提供します。完全なリストは、ReSharper オプションのページとコンテキストアクショ...

文字列リテラルを含む行の分割 | ReSharper

長い文字列リテラルを入力すると、ReSharper は行を分割し、必要な引用符とプラス記号を追加できます。キャレットは文字列リテラル内にあります Enter を押すと、コードの構文が壊れないように文字列が正しく分割されます。これで、記号を削除すると、文字列部分が冗長引用符なしで一緒に戻ります。文字列リテラルを分割する別の方法は、文字列を分割する場所にキャレットを設定し、を押して文字列の分割を選択することです。このコンテキストアクションでは、必要な引用符とも追加されますが、文字列の両方の部分は同じ行...

正規表現のアシスタンス | ReSharper

ReSharper は、.NET の正規表現で作業するための豊富なツールセットを提供します。既存の式をすばやく分析し、エラーを見つけて修正できます。ReSharper は、新しい式を入力する際に、自動補完と検証を支援します。文字列リテラルの正規表現:デフォルトでは、ReSharper は、正規表現クラスのメソッドで、パラメーターの正規表現のみを処理します。ただし、正規表現を含む文字列は、文字列定数、フィールド、他のメソッドの引数など、さまざまな場所で定義できます。ReSharper で文字列を...

部分文字列に変数を導入するリファクタリング | ReSharper

このリファクタリングにより、文字列の一部を別の変数にすばやく移動できます。初期文字列は、型メンバーの割り当てであってはならないことに注意してください。リファクタリングはローカル変数を作成するため、ステートメントが許可されている場合にのみ機能します。ターゲット C# バージョンに応じて、ReSharper は補間された文字列またはを使用します。コンテキストアクション Alt+Enter を使用して、いつでも変換できることに注意してください。部分文字列に変数を導入するコード内の文字列の部分文字列を選択し...

ローカライゼーションリファクタリング | ReSharper

ReSharper は、プロジェクトの国際化を大幅に簡素化する一連のリソース関連のリファクタリングを提供します。リソースに移動:プロジェクトの内部化に取り組むときは、ローカライズ可能な文字列をリソースファイルに格納するのが一般的です。ReSharper はローカライズ対象の文字列を検出してハイライトするため、そのような文字列を簡単に見つけてソースコードからリソースファイルに移動できます。ReSharper は対応するリソースエントリを宣言し、コード内の文字列をリソース使用量に置き換えます。ロー...

ソースコードのアノテーション | ReSharper

ReSharper のコードアノテーションの恩恵を受ける最も簡単な方法は、ソースコードのシンボルにアノテーション属性を追加し、ReSharper がソリューションをより正確かつ洞察力で分析できるようにすることです。デフォルトでは、すべてのアノテーション属性クラスは属性でマークされているため、コンパイラーはコード内の属性の使用を無視します。つまり、'JetBrains.Annotations.dll' アセンブリへのバイナリ参照は生成されません。ただし、プロジェクトで「JETBRAINS_ANNO...