ReSharper 2020.2ヘルプ

コードの構文スタイル: 暗黙的/明示的な型指定 ('var' キーワード)

C# 3.0で導入された暗黙的に型付けされたローカル変数(英語)var キーワードとも呼ばれます)(英語)を使用すると、多くのシナリオで読みやすくなるため、非常に人気があります。デフォルトでは、ReSharperは var キーワードの使用も推奨しますが、その使用方法の設定柔軟に構成可能です。たとえば、特定のケースまたはどこでも明示的なタイプを使用することを選択でき、ReSharperは設定の強制に役立ちます。

C# 7.0以降、タプルを分解(英語)するときにローカル変数を宣言できます。このような宣言で var を使用したい場合は、結合表記または分離表記を使用するようにスタイルをさらに構成できます。つまり、var (x, y) = GetTuple(); または (var x, var y) = GetTuple();です。

もう1つのC# 7.0機能は破棄です(英語)。これにより、var を使用して、_という名前のスコープ内の変数との競合がないことを確認できます。ReSharperを使用すると、必要に応じて破棄とともに var を常に使用するようにスタイルを構成できます。

「var」キーワードを使用する設定を強制する

ReSharperはあなたの好みに合っているかどうかすべてのローカル変数をチェックします。もしそれらが遵守していなければ、ReSharper はそのような宣言を強調し、対応するクイックフィックスまたはスコープの修正を提案します。

デフォルトでは、ReSharperの設定では、'var'キーワードが優先されます:

'Var' usage quick-fix
設定を変更した場合、ReSharperは明示的な型を使用できます:
'Var' usage quick-fix

一括モードで 'var'キーワードの使用方法を優先するためのもう1つのオプションは、コードのクリーンアップです。デフォルトのプロファイルフルクリーンアップまたは再フォーマットして構文スタイルを適用のいずれかを使用してコードのクリーンアップを実行するか、または以下に説明されているように特定のタスク専用のカスタムプロファイルを作成して実行することができます。

カスタムコードクリーンアッププロファイルで「var」キーワードを使用する設定を適用する

  1. メインメニューからReSharper | オプションを選択するか、Alt+R Oを押します。

  2. クリーンアッププロファイル設定ページに移動します:コード編集 | コードのクリーンアップ | プロファイル

  3. 新しいカスタムクリーンアッププロファイルを作成するセクションの説明に従って、新しいプロファイルを作成します。新しいプロファイルの選択したプロファイル設定セクションで、'var' キーワードの使用設定を強制するチェックボックスをオンにします。必要に応じて、このプロファイルで他のコードクリーンアップタスクを有効にすることができます。

  4. オプションダイアログで保存をクリックして変更を適用し、ReSharperに保存場所を選択させるか、次へ保存リストを使用して変更を特定の設定レイヤーに保存します。詳細については、ReSharper設定の管理と共有を参照してください。

  5. 設定を適用する範囲を選択します。

    • ファイルの任意の場所にキャレットを設定して、ファイルの設定を強制します。

    • ソリューション・エクスプローラー内の1つまたは複数の項目を選択して、これらのノードおよびその子項目にあるファイルに設定を適用します。

  6. 以下のいずれか 1 つを実行します:

    • Control+Alt+F を押すか、メインメニューからReSharper | 編集 | コードのクリーンアップ...を選択します。

    • テキストエディターの任意の場所を右クリックするか、選択項目を右クリックし、コンテキストメニューでコードのクリーンアップを選択します。

  7. 開いているコードクリーンアップダイアログで、新しく作成したプロファイルを選択します。

  8. 実行をクリックします。ReSharperは、選択した範囲であなたの設定を強制します。

コードクリーンアップダイアログを開かずに「var」キーワードの使用設定を適用する場合、作成されたプロファイルをサイレントクリーンアップにバインドし、Control+Shift+Alt+Fを押して実行できます。また、設定を他のコードスタイルタスクと組み合わせて使用するカスタムクリーンアッププロファイルを作成することもできます。

「var」キーワードを使用する設定を構成する

'var' キーワードの使用設定は、レイヤーベースの設定の仕組みを使って保存されます。とりわけ、このメカニズムにより、さまざまなソリューションのさまざまな設定を維持したり、これらの設定をVCSに保持したり、チームメンバーと自動的に共有することができます。

「オプション」ダイアログで「var」キーワードを使用する設定を構成する

  1. ReSharperオプション(Alt+R O)のコード編集 | C# | 構文スタイルページに移動します。

  2. 宣言における 'var' の使用箇所カテゴリの設定を、コーディングのプラクティス/標準に従って変更します。

    タイプごとに 'var' または明示的なタイプを使用する異なる設定を設定できます。

    • ビルトインタイプの場合 - C#ビルトインタイプ(英語)に適用されます。

    • 単純型の場合 - ジェネリックパラメータのない型に適用されます。

    • 他の場所 - ジェネリック型と分解宣言に適用されます。

    これらの設定ごとに、「var」、明示的なタイプ、または明らかなときに 'var' の使用を選択できます。

  3. 前の手順で明確な場合は 'var' を使用するを選択した場合は、Visual Studioロジックを適用して、どのケースを明白と見なすかを決定できます。

    ReSharperロジックとVisual Studioロジックの違いについては、明確な場合は 'var' を使用する: 明らかと考えられるものは何ですか?を参照してください。

  4. デフォルトでは、ReSharperは、分解宣言(英語)で複数の varの結合表記( var (x, y) = GetTuple();など)を提案します。展開された変数の宣言を別にすることを選択して、(var x, var y) = GetTuple();などの別の表記を選択できます。

  5. デフォルトでは、ReSharperは破棄(英語)にスタンドアロン _ を使用することを推奨します(例: (_, _) = (0, 1);)。破棄には 'var' キーワードを使用するを選択して、適切な場合は常に破棄とともに var を使用することで、_という名前のスコープ内の変数との競合がないことを確認できます。

  6. 右側の列の通知するセレクターを使用して、設定とは異なるコードインスペクション検出コードの重大度レベルを設定できます。

  7. オプションダイアログで保存をクリックして変更を適用し、ReSharperに保存場所を選択させるか、次へ保存リストを使用して変更を特定の設定レイヤーに保存します。詳細については、ReSharper設定の管理と共有を参照してください。

また、エディターで 'var' キーワードを使用することの好みを変更することもできます。該当する課題が強調表示されます:

エディターから「var」キーワードを使用する設定を変更する

  1. ReSharperのインスペクションによって強調表示されたコードの課題にキャレットを設定します。

  2. Alt+Enter を押すか、キャレットの左側にあるアクションインジケーターをクリックして、アクションリストを開きます。

  3. アクションリストで、インスペクション"優先「var」スタイルを使用" | コードスタイルを設定するに移動して、希望の設定を選択します。

    Changing code style preference for 'var' keyword

  4. 変更は、スマートセーブロジックを使用して保存されます。

  5. 変更されたスタイル設定を共有設定レイヤーに保存する必要がある場合は、コードスタイルを設定するメニュー項目をクリックするか、選択されているときに Enter を押します。ReSharperは、ReSharperオプション(Alt+R O)のコード編集 | C# | 構文スタイルページを開きます。ここで、必要に応じて設定を変更し、次へ保存をクリックして、目的の設定レイヤーを選択します。

明確な場合は 'var' を使用する: 明らかと考えられるものは何ですか?

「var」キーワードと明示的なタイプを使用する設定を構成する場合、明確な場合は 'var' を使用するを選択できます。このオプションは自明のように見えますが、場合によっては「明らか」と見なされるものとそうではないものが不明な場合があります。

それとは別に、両方の製品が 'var' キーワードまたは明示的なタイプの使用を提案する場合、ReSharperとVisual Studioによって明らか(見かけ)と見なされるものの間にはいくつかの違いがあります。

次の表は、ReSharperオプション(Alt+R O)のコード編集 | C# | 構文スタイルページの型の証拠にはRoslyn(Visual Studio)ロジックを優先するチェックボックスの状態に応じて、'var' として宣言できる初期化子が明らかと見なされる場合を示しています。

初期化式サンプルオフオン
オブジェクト作成式new MyClass()明らか明らか
キャスト式(MyClass) obj明らか明らか
asobj as MyClass明らか明らか
リテラル式"some string literal"
123
true
明らか明らか
デフォルトの式default(MyClass)明らか明らか
タプル式(1, 2, 3)すべてのコンポーネント式が明らかな場合に明らか
明示的な配列作成式new int[] { 1, 2, 3 }
new MyClass[5]
明らか明らか
暗黙的な配列作成式new [] { 1, 2, 3}
new [,] { {1, 2, 3}, {1, 2, 3}, {1, 2, 3} }
すべての要素初期化子(最大42)が明らかな場合に明らか明らかではない
非ジェネリックファクトリ(作成)メソッド (ある型で宣言され、同じ型の値を返す静的メソッド)MyClass.Build(someArgs) // returns MyClassメソッド名に親タイプ名または次のサブストリングのいずれかが含まれている場合に明らか: 「作成」、「ビルド」、「構築」、「作成」、「生成」、「生成」、「新規」、「インスタンス」明らか
一般的なファクトリー(作成)メソッド (ジェネリック型を返し、戻り型と同じ名前のクラスで宣言された静的メソッド)Tuple.Create(1, 2, 3)すべてのメソッド呼び出し引数が明白であり、メソッド名に次のサブストリングの1つまたはクラス名が含まれている場合に明らか: 「作成」、「ビルド」、「構築」、「作成」、「生成」、「生成」、「新規」、「インスタンス」明らか
変換方法 (「To」に戻り型の名前を加えた名前のメソッド)obj.ToString() enumeration.ToList()戻り値の型がジェネリックでない場合に明らか明らか
型引数の値を返す明示的な型引数を持つジェネリックメソッドobj.GetValue<MyClass>() // returns MyClass明らか明らかではない
EnumメンバーKnownColor.Azure明らか明らかではない
シングルトンフィールド (宣言されている型の値を返す静的/定数フィールド)int.MaxValue string.Emptyフィールド名にタイプ名または次のサブストリングのいずれかが含まれている場合に明らか: 「空」、「インスタンス」、「デフォルト」、「値」明らかではない

異なる言語での適用性

この機能は、次の言語とテクノロジーでサポートされています。

Language: C#Language: VB.NETLanguage: C++Language: HTMLLanguage: ASP.NETLanguage: RazorLanguage: JavaScriptLanguage: TypeScriptLanguage: CSSLanguage: XMLLanguage: XAMLLanguage: ResxLanguage: Build ScriptsLanguage: ProtobufLanguage: JSON
Feature is available in C#Feature is not available in Visual Basic .NETFeature is not available in C++Feature is not available in HTMLFeature is not available in ASP.NETFeature is not available in RazorFeature is not available in JavaScriptFeature is available in TypeScriptFeature is not available in CSSFeature is not available in XMLFeature is not available in XAMLFeature is not available in Resource filesFeature is not available in build script filesFeature is not available in ProtobufFeature is not available in JSON

C#の機能の使用方法については、こちらの説明と例を参照してください。他言語の詳細については、言語によるReSharperの対応するトピックを参照してください。

最終更新日:

関連ページ:

設計時にコードの課題を検出する

ReSharperは、エディターでコード・ファイルを開くとすぐに分析を開始し、最後まで編集を続けます。検出されたすべてのコードの課題は、重大度に従ってエディターで強調表示されます。課題のマップは、エディターウィンドウの右側のマーカーバーにも表示されます。ここでは、ファイルのステータスを即座に確認し、...

コードの課題のクイックフィックス

ReSharperを使用すると、設計時に検出されたほとんどのコード課題を即座に修復できます。強調表示されたコードの課題で を押して、課題を解決したり最適以下のコードを改善したりするための適切な方法を選択するのと同じくらい簡単です。クイックフィックスを適用する:クイックフィックスは、ハイライトされた...

スコープの修正

ほとんどのクイックフィックスは、キャレットで現在の課題を修正できますが、中には (たとえば、未使用のディレクティブを削除する、フィールドを読み取り専用にする、冗長なキャストの除去など)、現在のファイル、現在のプロジェクト、またはソリューション全体など、より大きな範囲で課題を自動的に見つけて修正できる...

コードインスペクション設定の構成

コード注釈を使用して、ReSharperがコードをインスペクションする方法をカスタマイズすることもできます。設計時コードインスペクションを構成する:デフォルトでは、ReSharperは、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効に...

コードのクリーンアップ

ReSharper | 編集 | コードのクリーンアップ...コマンドラインユーティリティを使用してコードのクリーンアップを実行することもできます。ReSharperを使用すると、フォーマットやその他のコードスタイル設定を一括モードで適用して、1つ以上のファイル、プロジェクト、またはソリューション全...

ReSharper設定の管理と共有

ReSharperは、階層化された設定のメカニズムを使用して環境設定を保存するため、次の利点があります。さまざまなソリューションで異なる設定を行うことができます。環境設定のさまざまなサブセットを別の場所に保存し、特定のソリューションで作業するときに環境設定を組み合わせることができます。例:記号のアイ...