文字列リテラルのコード分析とヘルパー
プレーン文字列
コードにプレーンな文字列を使って作業しているときに ReSharper がどのように役立つかは次のとおりです。
デフォルトでは、ReSharper は、すべての非逐語的な文字列の正しいおよび不正なエスケープシーケンスをハイライトします。
キャレットが文字列内にあるときに Alt+Enter を押し、対応するコンテキストアクションを選択することで、通常の文字列を逐語的な文字列に変換したり、元に戻したりできます。これは、補間された文字列でも機能します。
Enter を押すだけで、文字列リテラルを分割できます。
文字列に正規表現が含まれている場合、ReSharper はその構文とエラーをハイライトし、式内のコード補完を支援します。詳細については、正規表現の支援を参照してください。
同様に、ReSharper に文字列リテラルの HTML を分析させることができます。ReSharper に文字列リテラル内の特定の言語を認識させるには、対応するコンテキストアクションを使用するか、文字列リテラルの直前にコメント
/*language=regexp|jsregexp|html*/
を追加します。プロジェクトがローカライズ可能であれば、自動的に文字列を resource に移動できます。
システム文字列のフォーマット方法
ReSharper は、String.Format
、Text.StringBuilder.AppendFormat
、Console.WriteLine
などのすべての .NET 文字列フォーマット方法のフォーマット文字列と引数を分析します。
文字列フォーマットの使い方では、ReSharper はフォーマットプレースホルダをハイライトし、キャレットがそのいずれかにあるときにプレースホルダと対応する引数を同期的にハイライト表示します。
引数とフォーマットプレースホルダが一致しない場合(引数がない場合は実行時に FormatException
につながります)、ReSharper は欠落しているか重複している引数に対して警告を生成します。
警告よりも Alt+Enter を押すと、この問題を簡単に修正できます。ReSharper は、不足している引数を自動的に追加するか、不一致のフォーマットプレースホルダを削除するかのどちらかを提案します。
ReSharper はまた、他の文字列フォーマットメソッドの中で、文字列フォーマットメソッドの冗長な呼び出しを検出して削除できます。例:
文字列リテラルと変数の連結をすばやく変換するには、連結内の任意の場所で Alt+Enter を押して、To String.Format の呼び出し コンテキストアクションを使用します。例: このコンテキストアクションを次のメソッドの return
ステートメントに適用する
それは次のように変換されます:
また、コンテキストアクションを使用して、文字列の書式プレースホルダと引数を自動的に追加または削除することもできます。文字列リテラル内でフォーマット引数を挿入するアクションを呼び出すと、ReSharper は適切なインデックスを持つ新しいプレースホルダを挿入し、すぐに引数の入力を開始できる位置に移動します。このアクションはプレーンな文字列でも呼び出すことができます。この場合、ReSharper は自動的に String.Format
コールに変換します。
書式プレースホルダーと対応する引数をすばやく削除するには、プレースホルダーにキャレットを置き、Alt+Enter を押してフォーマット引数を削除するを選択します。
カスタム文字列フォーマットメソッドの場合
カスタム文字列フォーマットメソッドでコード分析および支援機能を有効にするには、JetBrains.Annotations 名前空間の [StringFormatMethod]
および [StructuredMessageTemplate]
属性を使用します。
カスタム文字列フォーマットメソッド ShowError
を考えてみましょう。
以下に示すように、メソッドが誤って呼び出された場合、ReSharper は欠落している引数を検出する機会がありません。
ReSharper にカスタム文字列フォーマット方法を認識させる
JetBrains.Annotations
名前空間を参照するには、ソースコードのアノテーションセクションを参照してください。カスタム文字列フォーマットメソッドに
[StringFormatMethodAttribute]
属性のアノテーションを付けます。これは 1 つの引数 (書式文字列パラメーターの名前) を受け取ります。[StringFormatMethod("formatString")] public void ShowError(string formatString, params object[] args) { // some custom logic Console.WriteLine(formatString, args); }ReSharper は、このカスタムフォーマットメソッドが呼び出されたときに、引数が欠落していることを警告できます。さらに、引数の追加 クイックフィックスを使用すると、挿入が簡単になります。
あるいは、フォーマットされた文字列を受け入れるパラメーターに
[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 は $
記号を重複してハイライトし、削除できます。
文字列の入力に没頭しているときに、文字列の先頭に $
をすばやく追加する必要がある場合は、Alt+Enter を押して文字列補間を選択できます。
次に、補間引数を挿入しますを選択することもできます。ReSharper は、引数プレースホルダー { }
をキャレットの位置に追加します。
関連ページ:
コンテキストアクション
コンテキストアクションは、エディターで直接利用できるコード変換ヘルパーです。クイックフィックスとは対照的に、コンテキストアクションは問題の解決やコードの改善を目的としているためはなく、アクセス修飾子の変更、null をチェックするコードの生成、'foreach' の 'for' への変換などの小さな変更をすばやく導入できます。ReSharper は、サポートされているすべての言語で数百のコンテキストアクションを提供します。完全なリストは、ReSharper オプション Alt+R, O のページとコ...
文字列リテラルの分割と結合
長い文字列リテラルを入力する場合、ReSharper はリテラルを複数行に分割し、必要な引用符とプラス記号を追加できます。キャレットは文字列リテラル内にあります Enter を押すと、コードの構文が壊れないように文字列が正しく分割されます。デフォルトでは、文字列リテラルの連結部分間の記号を削除すると、その部分は 1 つのリテラルに結合され、冗長な引用符は削除されます。この動作を無効にするには、ReSharper オプション Alt+R, O のページで連結された文字列間のプラス記号を削除して結合しますチ...
正規表現の支援
ReSharper は、.NET の正規表現で作業するための豊富なツールセットを提供します。既存の式をすばやく分析し、エラーを見つけて修正できます。ReSharper は、新しい式を入力する際に、自動補完と検証を支援します。文字列リテラルの正規表現:デフォルトでは、ReSharper は、正規表現クラスのメソッドで、パラメーターの正規表現のみを処理します。ただし、正規表現を含む文字列は、文字列定数、フィールド、他のメソッドの引数など、さまざまな場所で定義できます。ReSharper で文字列を...
部分文字列に変数を導入するリファクタリング
このリファクタリングにより、文字列の一部を別の変数にすばやく移動できます。最初の文字列は型メンバーの割り当てであってはならないことに注意してください。リファクタリングはローカル変数を作成するため、ステートメントが許可されている場合にのみ機能します。ターゲット C# バージョンに応じて、ReSharper は補間文字列またはのいずれかを使用します。コンテキストアクション Alt+Enter を使用してそれらの間でいつでも変換できることに注意してください。部分文字列に変数を導入するコード内の文字列の部分...
ローカライゼーションリファクタリング
ReSharper は、プロジェクトの国際化を大幅に簡素化する一連のリソース関連のリファクタリングを提供します。リソースに移動:プロジェクトの内部化に取り組むときは、ローカライズ可能な文字列をリソースファイルに格納するのが一般的です。ReSharper はローカライズ対象の文字列を検出してハイライトするため、そのような文字列を簡単に見つけてソースコードからリソースファイルに移動できます。ReSharper は対応するリソースエントリを宣言し、コード内の文字列をリソース使用量に置き換えます。ロー...
ソースコードのアノテーション
ReSharper のコードアノテーションの恩恵を受ける最も簡単な方法は、ソースコードのシンボルにアノテーション属性を追加し、ReSharper がソリューションをより正確かつ洞察力で分析できるようにすることです。デフォルトでは、すべてのアノテーション属性クラスは属性でマークされているため、コンパイラーはコード内の属性の使用を無視します。つまり、'JetBrains.Annotations.dll' アセンブリへのバイナリ参照は生成されません。ただし、プロジェクトで「JETBRAINS_ANNO...