コードインスペクション: デリゲート変数をローカル関数に変換する
ローカル関数は、ラムダやデリゲートとは異なり、本質的に通常のメソッドであるため、追加のオーバーヘッドは発生しません。 例: デリゲートをインスタンス化して呼び出すには、コンパイラーによって生成される追加のメンバーが必要となり、メモリのオーバーヘッドが発生します。 ローカル関数のもう 1 つの利点は、通常のメソッドで許可されるすべての構文要素をサポートしていることです。 デリゲートをローカル関数に置き換えることができる場合、JetBrains Rider はそうすることを提案します。
ユーザー定義のデリゲートを使った例を考えてみましょう。 JetBrains Rider は、デリゲート変数 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();
}
}
別の例では、JetBrains Rider がジェネリックデリゲート 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 日