C# で関数をパラメーターとして渡す
![C# で関数をパラメーターとして渡す](/img/Csharp/feature-image---pass-function-as-parameter-inside-another-function-in-csharp.webp)
このチュートリアルでは、C# の別の関数内で関数をパラメーターとして渡すメソッドを紹介します。
C# で Func<>
デリゲートを使用して関数をパラメーターとして渡す
Func<T1, T-return>
デリゲートは、T1
というパラメータと T-return
という戻り値の型を持つ関数を定義します。Func<T1, t-return>
デリゲートを使用して、関数を別の関数内のパラメーターとして渡すことができます。次のコード例は、C# の Func<>
デリゲートを使用して、関数を別の関数内のパラメーターとして渡す方法を示しています。
using System;
namespace pass_function_as_parameter {
class Program {
static int functionToPass(int x) {
return x + 10;
}
static void function(Func<int, int> functionToPass) {
int i = functionToPass(22);
Console.WriteLine("i = {0}", i);
}
static void Main(string[] args) {
function(functionToPass);
}
}
}
出力:
i = 32
整数値をパラメーターとして受け取り、それを 10
でインクリメントし、結果を整数値として返す関数 functionToPass(int x)
を定義しました。functionToPass()
関数をパラメーターとして function()
関数に Func<int, int>
デリゲートで渡しました。値 22
を function()
関数内の functionToPass()
関数に渡しました。メイン関数では、function(functionToPass)
関数呼び出しで関数を呼び出しました。Func<>
デリゲートは、何らかの値を返す関数を渡すためにのみ使用できます。
C# の Action<>
デリゲートを使用して、関数を別の関数内のパラメーターとして渡す
値を返さない関数を渡したい場合は、C# で Action<>
デリゲートを使用する必要があります。Action<T>
デリゲートは、関数デリゲートと同じように機能します。T
パラメータで関数を定義するために使用されます。Action<>
デリゲートを使用して、関数をパラメーターとして別の関数に渡すことができます。次のコード例は、C# の Action<>
デリゲートを使用して、関数を別の関数内のパラメーターとして渡す方法を示しています。
using System;
namespace pass_function_as_parameter {
class Program {
static void functionToPass2(int x) {
int increment = x + 10;
Console.WriteLine("increment = {0}", increment);
}
static void function2(Action<int> functionToPass2) {
functionToPass2(22);
}
static void Main(string[] args) {
function2(functionToPass2);
}
}
}
出力:
increment = 32
整数値をパラメーターとして受け取り、それを 10
でインクリメントして結果を出力する関数 functionToPass2(int x)
を定義しました。functionToPass2()
関数をパラメーターとして function()
関数に Action<int>
デリゲートで渡しました。値 22
を function2()
関数内の functionToPass2()
関数に渡しました。メイン関数では、function2(functionToPass2)
関数呼び出しで関数を呼び出しました。Action<>
デリゲートは、値を返さない関数を渡すためにのみ使用できます。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn