null チェックルーチンを生成する
ReSharper には、値型のパラメーター、式、null の変数をチェックするコードを生成するためのさまざまな方法が用意されています。目的に応じて、null チェックルーチンは 2 つのカテゴリに分けられます:
null は例外とアサーションをチェックする
null
参照であるオブジェクトに遭遇することがプログラムで重大であり、例外をスローすることによってログに記録されるか、シグナルが通知される状況があります。ここでの典型的な例は、null
オブジェクトを受け入れるように設計されていない関数に ArgumentNullException
を投げることです。
例外とアサーションの null チェックを生成する
これらの種類の null チェックは、次の方法で生成できます。
パラメーターまたは式で Alt+Enter を押して、対応するコンテキストアクションを選択します。
パラメーターが [NotNull] 属性でマークされている場合は、パラメーター名またはパラメーター型の直後にキャレットを置き、! を押すことができます。
private void Foo([NotNull] object/*!*/ arg/*!*/)コンストラクター(Alt+Insert )を生成するときは、ダイアログで null のパラメーターを確認するを選択します。
NULL 可能な式の
null
のアサーションを生成するために、ReSharper は Alt+Enter に null の式をアサートするアクションを提供します。NULL 可能性分析の設定に応じて、クイックフィックスまたはコンテキストアクションとして表示されます。ReSharper が式が決して
null
でないと推測する場合、このアクションは利用できなくなります。
プロジェクトでコードアノテーションを使用する場合、ReSharper は、null をチェックするパラメーターを [NotNull] 属性で装飾します。これにより、装飾されたパラメーターに null オブジェクトが渡されたときに ReSharper が通知します。
ReSharper オプション Alt+R, O の ページでアノテーションを自動的に伝播するチェックボックスをオフにすると、[NotNull]
の追加を無効にすることができます。
例外とアサーションの null チェックの設定
この種の null チェックはさまざまな方法で記述できるため、ReSharper オプション Alt+R, O の ページで構成できます。また、対応するアクションの Alt+Enter メニューからもアクセスできます。

このオプションページには、事前定義されたすべての 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 番目のパターンを使用します。
アサーションを生成する場合も同様です。ReSharper は、アサーションに使用できるでマークされている最初のパターンを使用します。
NULL チェックを生成する設定がある場合は、オプションページの上へ移動 Alt+U/ 下へ移動 Alt+D ボタンを使用して、希望するパターンの優先度を上げます。
例外とアサーションのカスタム null チェックの作成
コードベースが null チェックを処理するための専用のヘルパーメソッドを提供している場合は、オプションページで太字でハイライトされている 2 つのカスタムパターン(カスタム (ステートメント) とカスタム (式))を編集して独自の null チェックパターンを作成できます。

デフォルトでは、これらの 2 つのパターンは最も低い優先順位を持ちます。つまり、生成に使用されることはありません。使用する場合は、優先順位を上げるために移動してください。
リストでカスタムパターンを選択すると、$EXPR$
、$NAME$
、$MESSAGE$
プレースホルダーを使用してページ下部のテキストフィールドで編集できます。パターンが有効である限り、ReSharper はテキストフィールドに対応するアイコンを表示します。
アサーションに使用できるチェックボックスをオンにして、パターンを null の式をアサートするアクションで機能させることもできます。
null 値を持つオブジェクトをスキップするための null チェック
そのようなオブジェクトをスキップすることがあなたのプログラムにとって受け入れ可能な場合、null
参照であるオブジェクトへのメンバーアクセスを避けるために、別の種類の null チェックが使用されます:
このようなチェックを生成するために、ReSharper は Alt+Enter に対して null の式を確認するおよび条件付きアクセスを使用するアクションを提供します。NULL 可能性分析の設定に応じて、これらのアクションはクイックフィックスまたはコンテキストアクションとして表示されます。

ただし、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...