ReSharper 2026.1 Help

コードインスペクション:デリゲート変数をローカル関数に変換する

ローカル関数は、ラムダやデリゲートとは異なり、本質的に通常のメソッドであるため、追加のオーバーヘッドは発生しません。 例: デリゲートをインスタンス化して呼び出すには、コンパイラーによって生成される追加のメンバーが必要となり、メモリのオーバーヘッドが発生します。 ローカル関数のもう 1 つの利点は、通常のメソッドで許可されるすべての構文要素をサポートしていることです。 デリゲートをローカル関数に置き換えることができる場合、ReSharper はその実施を提案します。

ユーザー定義のデリゲートを使った例を考えてみましょう。 ReSharper は、デリゲート変数 mymethod をローカル関数 Mymethod に置き換えます。 置き換え後は、未使用のデリゲート MethodDelegate を削除することもお勧めします。

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(); } }
class DelegateTest { public static void Main(string[] args) { void Mymethod(string message) { Console.WriteLine(message); } Mymethod("test"); Console.ReadLine(); } }

別の例では、ReSharper がジェネリックデリゲート Func をローカル関数に置き換えます:

class ConvertToLambda { public static int ConvertTest() { Func<int, int, int> sum = delegate(int x, int y) { return x + y; }; return sum(10, 20); } }
class ConvertToLambda { public static int ConvertTest() { int Sum(int x, int y) { return x + y; } return Sum(10, 20); } }
2026 年 6 月 12 日