私はC#を初めて使用します。それで遊んでください。本当の目的ではありません。
void makeOutput( int _param)
{
Console.WriteLine( _param.ToString());
}
//...
// Somewhere in a code
{
makeOutput( /* some not c# code for an example for what do I want */ function : int () { return 0; } );
}
REAL無名関数(結果を返すことを意味します)を使用することは可能ですか?
次のようなデリゲートを使用したくない
// Somewhere in a code
{
Func<int> x = () => { return 0; };
makeOutput( x())
}
また、次のようなメソッドパラメータタイプを変更したくない
void makeOutput( Func<int> _param)
{
}
それは非常に一般的な決定です。
すべてが正常である。不可能なことをしたいということを理解しました。無名関数を宣言して同じ場所で実行したかったのです。注:汎用ラッパーを使用しないDIRECT宣言およびDIRECT呼び出し。
// flash-like (as3) code /// DOES NOT COMPILE
makeOutput( (function : int(){ return 0; })() );
はい。
これはデリゲートと呼ばれます。
デリゲートは(多かれ少なかれ)通常のタイプです。他のタイプと同じように、それらを関数に渡すことができます。
void makeOutput(Func<int> param) {
Console.WriteLine(param());
}
makeOutput(delegate { return 4; });
makeOutput(() => { return 4; });
makeOutput(() => 4);
君の 編集edの質問は意味がありません。
C#はタイプセーフです。
メソッドが関数をパラメーターとして必要としない場合、メソッドをパラメーターとして指定することはできません。
void makeOutput(Func<int> _param)
{
makeOutput(_param());
}
void makeOutput(int _param)
{
Console.WriteLine( _param.ToString());
}
これでうまくいきます!
それは簡単な方法です:オーバーロード!
私も同様の問題を抱えていて、友人が道を教えてくれました。
makeOutput((new Func<Int32>(() => { return 0; })).Invoke());
これが役立つことを願っています