ReSharper 2026.1 Help

コードインスペクション:パラメーター出力値は常に破棄されます(非 private アクセス)

C# 6.0 の"out var"により、 out パラメーターを持つメソッドを利用する際に必要なコード量が大幅に削減されます。現在では、ほとんどの場合、変数をインラインで宣言し、しばしば型推論を使って変数の型を省略します: dictionary.TryGetValue(key, out var value).

C# 6.0 が改善した out パラメーターの別の側面は、 M(out _) または M(out var _) 構文では不要な出力パラメーター値を無視する機能です。 最新の C# コードベースで DoSomething(arg, out _, out _) のような呼び出しが見られることは珍しくありません。

ReSharper はこのような呼び出しを分析し、すべての呼び出しサイトで破棄される out パラメーターを報告します。 これは、値が常に破棄される潜在的な問題を特定し、未使用のパラメーターを削除することで署名を簡素化できます。

class SetOfThings { private Dictionary<string, int> _set = new(); // Parameter 'value' output value is always discarded public bool HasKey(string key, out int value) { return _set.TryGetValue(key, out value); } } class Test { public void Usage(SetOfThings set) { if (set.HasKey("abc", out _)) Console.WriteLine("do something"); } }
class SetOfThings { private Dictionary<string, int> _set = new(); public bool HasKey(string key) { int value; return _set.TryGetValue(key, out value); } } class Test { public void Usage(SetOfThings set) { if (set.HasKey("abc")) Console.WriteLine("do something"); } }

ソリューション全体のインスペクションを機能させるには、次の少なくとも 1 つを有効にする必要があります。

  • 簡略化されたグローバル使用状況チェック: ReSharper オプション の コードインスペクション | 設定 ページで ソリューション全体の分析がオフの場合に、未使用の非プライベートタイプメンバーを表示する を選択します Alt+R、O

  • ソリューション全体の分析: ReSharper オプション の コードインスペクション | 設定 ページで ソリューション全体の分析を有効化する を選択します Alt+R、O

報告されたパラメーターがソリューション内で直接使用されていない場合でも、リフレクションなどによって間接的に使用される場合や、単にパブリック API として設計されている場合もあります。 これらのすべてのケースでは、次のいずれかの方法で、パラメーターの使用状況チェックインスペクションを 抑制する必要があります。

  • 推奨される方法は、暗黙的に使用されているパラメーターに コードアノテーション属性を付与することです。 この目的には、 [UsedImplicitly] 属性と [PublicAPI] 属性があり、どちらも機能は似ていますが、パラメーターが実際にどのように使われているかをチームメイトと一緒に理解できます。

  • また、カスタム属性を使用してインスペクションの使用状況を抑制することもできます。 これを行うには、その属性の定義に [MeansImplicitUse] 属性を付けます。

  • そして最後に、特定の使用チェックインスペクションを、 抑制コメントまたは抑制属性を持つ他のコードインスペクションと同様に抑制することができます。

2026 年 6 月 12 日