ReSharper 2025.3 ヘルプ

コード検査: ラムダ式をメソッドグループに変換する

デリゲートに関して、メソッドグループはメソッドをデリゲート変数に割り当てる簡単な構文を提供します。この構文では、デリゲートのコンストラクターを明示的に呼び出す必要はありません。メソッドグループでは、メソッドのオーバーロードを使用できます。どのオーバーロードを呼び出すかは、デリゲートの署名によって決まります。

匿名関数(式ラムダまたは匿名メソッド)が 1 つのメソッドのみで構成されている場合、それをメソッドグループに変換して、よりコンパクトな構文を実現し、ラムダの使用によるコンパイル時のオーバーヘッドを防ぐことができます。以下の関連事項のリンクは、ラムダ式とメソッドグループの一般的な違いに関する詳細を提供します。コンパイル後、パフォーマンスの点でも違いがあるかもしれませんが、シナリオに大きく依存します — StackOverflow のこのコメント(英語)を参照してください。

ReSharper は、ラムダ式をメソッドグループ Console.WriteLine で置き換えるクイックフィックスを提案します。

internal static class DelegateTest { private delegate void MethodDelegate(string message); public void Main(string[] args) { MethodDelegate mymethod = message => { Console.WriteLine(message); }; mymethod("test"); Console.ReadLine(); } }
internal static class DelegateTest { private delegate void MethodDelegate(string message); public void Main(string[] args) { MethodDelegate mymethod = Console.WriteLine; mymethod("test"); Console.ReadLine(); } }

次の例は、このクイックフィックスが匿名メソッドに適用されたことを示しています。

internal class DelegateTest { private delegate void MethodDelegate(string message); public static void Main(string[] args) { MethodDelegate mymethod = delegate(string message) { Console.WriteLine(message); }; mymethod("test"); Console.ReadLine(); } }
internal class DelegateTest { private delegate void MethodDelegate(string message); public static void Main(string[] args) { MethodDelegate mymethod = Console.WriteLine; mymethod("test"); Console.ReadLine(); } }
2024 年 4 月 08 日