VB.NET では、ラムダ式を宣言して同じ行で呼び出すことができます。
'Output 3
Console.WriteLine((Function(num As Integer) num + 1)(2))
これはC#で可能ですか?
コンパイラに特定のデリゲート型を伝える必要があります。たとえば、ラムダ式をキャストできます。
Console.WriteLine(((Func<int, int>)(x => x + 1))(2));
編集:または、はい、Servyの回答に従ってデリゲート作成式を使用できます:
Console.WriteLine(new Func<int, int>(i => i + 1)(2));
これは実際には通常のコンストラクター呼び出しではないことに注意してください。これは、通常のコンストラクター呼び出しのように見えるデリゲート作成用の特別な構文です。それでも賢いですが:)
ヘルパー クラスを使用すると、少しきれいにすることができます。
public static class Functions
{
public static Func<T> Of<T>(Func<T> input)
{
return input;
}
public static Func<T1, TResult> Of<T1, TResult>
(Func<T1, TResult> input)
{
return input;
}
public static Func<T1, T2, TResult> Of<T1, T2, TResult>
(Func<T1, T2, TResult> input)
{
return input;
}
}
... それから:
Console.WriteLine(Functions.Of<int, int>(x => x + 1)(2));
または:
Console.WriteLine(Functions.Of((int x) => x + 1)(2));
Console.WriteLine(new Func<int, int>(i => i + 1)(2));
のコンストラクターを使用するためにFunc
、キャストよりも数少ない括弧を使用します。
はい、面倒ですが:
Console.WriteLine(((Func<int, int>) (num => num + 1))(2));
または、 Func オブジェクトを使用する必要があります。
var square = new Func<double, double>(d => d*d)(2);
Console.WriteLine(square);