ReSharper 2024.3 ヘルプ

null チェックルーチンを生成する

ReSharper には、値型のパラメーター、式、null の変数をチェックするコードを生成するためのさまざまな方法が用意されています。目的に応じて、null チェックルーチンは 2 つのカテゴリに分けられます:

null は例外とアサーションをチェックする

null 参照であるオブジェクトに遭遇することがプログラムで重大であり、例外をスローすることによってログに記録されるか、シグナルが通知される状況があります。ここでの典型的な例は、null オブジェクトを受け入れるように設計されていない関数に ArgumentNullException を投げることです。

例外とアサーションの null チェックを生成する

これらの種類の null チェックは、次の方法で生成できます。

  • パラメーターまたは式で Alt+Enter を押して、対応するコンテキストアクションを選択します。

    ReSharper: Checking parameter for null
  • パラメーターが [NotNull] 属性でマークされている場合は、パラメーター名またはパラメーター型の直後にキャレットを置き、! を押すことができます。

    private void Foo([NotNull] object/*!*/ arg/*!*/)
  • コンストラクターAlt+Insert | コンストラクター)を生成するときは、ダイアログで null のパラメーターを確認するを選択します。

  • NULL 可能な式の null のアサーションを生成するために、ReSharper は Alt+Enternull の式をアサートするアクションを提供します。NULL 可能性分析の設定に応じて、クイックフィックスまたはコンテキストアクションとして表示されます。

    ReSharper: Asserting expression for null

    ReSharper が式が決して null でないと推測する場合、このアクションは利用できなくなります。

プロジェクトでコードアノテーションを使用する場合、ReSharper は、null をチェックするパラメーターを [NotNull] 属性で装飾します。これにより、装飾されたパラメーターに null オブジェクトが渡されたときに ReSharper が通知します。

ReSharper オプション Alt+R, Oコードインスペクション | コードアノテーションページでアノテーションを自動的に伝播するチェックボックスをオフにすると、[NotNull] の追加を無効にすることができます。

例外とアサーションの null チェックの設定

この種の null チェックはさまざまな方法で記述できるため、ReSharper オプション Alt+R, Oコード編集 | C# | null チェックページで構成できます。また、対応するアクションの Alt+Enter メニューからもアクセスできます。

ReSharper: a shortcut for configuring null-check pattern

このオプションページには、事前定義されたすべての null チェックパターンが優先度順に一覧表示され、優先度の高いパターンが上部に表示されます。ReSharper が null チェックを生成すると、現在の C# バージョンを考慮して、コンテキストに意味的に適した最も優先度の高いパターンが使用されます。

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

ソリューション内のすべてのプロジェクトに C# バージョンを設定するには、ここで説明するように、ソリューションディレクトリの Directory.Build.props ファイルでそれを指定します。

例: デフォルト構成では、「throw expression」パターン $EXPR$ ?? new System.ArgumentNullException($NAME$); は「classic」throw ステートメント if ($EXPR$ == null) throw new System.ArgumentNullException($NAME$); よりも高い優先度を持ちます。ただし、現在のコンテキストで式が許可されていない場合、ReSharper は最初のパターンをスキップし、2 番目のパターンを使用します。

// Press Alt+Enter on 'arg' and choose 'Check parameter for null' private void Foo(object arg) { // as expression is not allowed here, the statement is generated: if (arg == null) throw new ArgumentNullException(nameof(arg)); } // However, in the following case the expression is already there private object myField; private void Foo(object arg) { myField = arg; } // so ReSharper will use the first pattern: private object myField; private void Foo(object arg) { myField = arg ?? throw new ArgumentNullException(nameof(arg)); }

アサーションを生成する場合も同様です。ReSharper は、アサーションに使用できるでマークされている最初のパターンを使用します。

NULL チェックを生成する設定がある場合は、オプションページの上へ移動 Alt+U/ 下へ移動 Alt+D ボタンを使用して、希望するパターンの優先度を上げます。

例外とアサーションのカスタム null チェックの作成

コードベースが null チェックを処理するための専用のヘルパーメソッドを提供している場合は、オプションページで太字でハイライトされている 2 つのカスタムパターン(カスタム (ステートメント)カスタム (式))を編集して独自の null チェックパターンを作成できます。

ReSharper: custom patterns for null checking

デフォルトでは、これらの 2 つのパターンは最も低い優先順位を持ちます。つまり、生成に使用されることはありません。使用する場合は、優先順位を上げるために移動してください。

リストでカスタムパターンを選択すると、$EXPR$$NAME$$MESSAGE$ プレースホルダーを使用してページ下部のテキストフィールドで編集できます。パターンが有効である限り、ReSharper はテキストフィールドに対応するアイコンを表示します。

アサーションに使用できるチェックボックスをオンにして、パターンを null の式をアサートするアクションで機能させることもできます。

null 値を持つオブジェクトをスキップするための null チェック

そのようなオブジェクトをスキップすることがあなたのプログラムにとって受け入れ可能な場合、null 参照であるオブジェクトへのメンバーアクセスを避けるために、別の種類の null チェックが使用されます:

if (expr != null) { DoSomething(); } // or, starting from C#6.0, with the conditional access operator: (expr)?.DoSomething();

このようなチェックを生成するために、ReSharper は Alt+Enter に対して null の式を確認するおよび条件付きアクセスを使用するアクションを提供します。NULL 可能性分析の設定に応じて、これらのアクションはクイックフィックスまたはコンテキストアクションとして表示されます。

ReSharper: Check expression for null quick-fix

ただし、ReSharper が、式が null を返すことができないと推定した場合(たとえば、対応する項目が [NotNull] 属性でマークされている場合や、式がすでに null であるかどうかなど)、これらのアクションは使用できません。

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

関連ページ:

コンテキストアクション

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

コードアノテーション属性

フレームワークは、以下で説明する多くの属性を提供します。これらの属性をコードで使用するには、ソースコードのアノテーションセクションの説明に従ってを参照する必要があります。アノテーション属性:CanBeNullAttribute マークされた要素の値がになることがあることを示します。そのため、使用前にのチェックが必要です。サンプル [CanBeNull] object Test() => null; void UseTest() { var p = Test(); var s = p.ToSt...

型コンストラクターを生成する

コンストラクター生成ウィザードは、選択されたフィールド、プロパティ、自動プロパティのパラメーターを取るデフォルト以外のコンストラクターを作成します。生成されたコンストラクターはすべて同じパターンに従います。コンストラクターに含まれる各フィールド、プロパティ、自動プロパティは、パラメーターで初期化されます。パラメーターの名前は、対応するフィールドまたはプロパティの名前から導出されます。デフォルト以外の基本型コンストラクターがある場合、必要なパラメーターが生成されたコンストラクターに追加され、基本ク...

価値と無効性の分析

ReSharper は、可能な「null」逆参照、重複ブール比較および null ・チェックを見つけるのに役立つ値分析を実行します。Null 許容値を分析するさまざまな方法:ReSharper は、いくつかの方法で値を分析できます。言語構成体の動作を理解します。次の例では、パラメーターが明示的に null 可能性をチェックされたという事実に基づいて、ReSharper はの値が実際に 'null' であると合理的に想定し、対応する警告を表示します。null 許容参照型が無効になっている場合、コ...

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

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

プロジェクト固有のプロパティを構成する

ReSharper の設定のメインセット(ReSharper | オプションダイアログで設定)は、グローバルまたはソリューションごとに適用されます。各プロジェクトまたはフォルダーごとに個別に設定できる環境設定もあります。これらの設定は、プロジェクトアイテムのプロパティポップアップで利用できます。プロジェクトアイテムのプロパティポップアップは、ソリューションエクスプローラーでプロジェクトのコンテキストメニューからプロジェクト項目のプロパティを編集するを選択して呼び出すことができます。他の ReSh...