ReSharper 2026.1 Help

コードインスペクション:null 許容参照型のアノテーションによると、条件付きアクセス修飾子式は null ではありません

null 許容参照型 (NRT) が有効になっている場合、このインスペクションは、null 許容コンテキストとアノテーションにより null ではないことが保証されている式に対して、冗長な条件付きアクセス演算子 (?.) を報告します。

次の例では、 GetRnd() は戻り値の型 Rnd? アノテーションなし)で宣言されています。これにより、null 許容対応コンテキストで戻り値が null になることはありません。 rnd がこの戻り値を受け取るため、非 null とみなされ、 rnd?.TrueOrFalse での条件付きアクセス演算子 ?. は不要となります。 そのため、ReSharper は rnd?.TrueOrFalsernd.TrueOrFalse に置き換えることを提案します。

#nullable enable class Test { Test() { var rnd = GetRnd(); if(rnd?.TrueOrFalse is true) Console.WriteLine("True"); } Rnd GetRnd() => new Rnd(); } public class Rnd { public bool TrueOrFalse => new Random().Next(2) == 0; }
#nullable enable class Test { Test() { var rnd = GetRnd(); if(rnd.TrueOrFalse is true) Console.WriteLine("True"); } Rnd GetRnd() => new Rnd(); } public class Rnd { public bool TrueOrFalse => new Random().Next(2) == 0; }

NRT は、null 値可能性分析の全体的な精度を向上させますが、値が #nullable コンテキストのないコードから取得される場合など、NRT 契約に違反する場合があります。 このような場合、null 値可能性チェックで誤検知の警告が表示されることがあります。 null 値可能な API 契約を無視し、コード内の値に対する以前の操作で null 値になるかどうかが保証されている場合にのみ問題を報告するように選択できます。

この動作は、 Alt+Enter メニューから直接変更できます。

ReSharper: null 許容参照型

... または、ReSharper オプション の コードインスペクション | 設定 ページで null 許容参照型の警告モード オプションを使用します。

ReSharper が null 許容 API コントラクトを無視する場合、null 許容性解析はプログラムの制御フローに依存して冗長な null チェックを報告します。 そのために別のインスペクションを使用します。 たとえば、次のようになります。

var myString = ApiMethod(); if (myString is null) throw new ApplicationException("the string is null"); // warning 'Expression is always true' // 'myString' cannot be null because it's already checked for null in our code if (myString != null) Console.WriteLine(myString);

NRT と ReSharper のサポート方法の詳細については、次のウェビナー録画をご覧ください:

2026 年 6 月 12 日