2011-07-28 14 views
14

私はC#の新機能です。ちょうどそれで周りを遊ぶ。本当の目的のためではありません。Lambda Anonymousパラメータとしての機能

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; } ); 
} 

実際の匿名関数(結果を返すこと)を使用することはできますか?

私はまた、私は非常に一般的な決定であるように

void makeOutput(Func<int> _param) 
{ 
} 

としてメソッドのパラメータの型を変更したくない、そのような

// Somewhere in a code 
{ 
    Func<int> x =() => { return 0; }; 

    makeOutput(x()) 
} 

としてデリゲートを使用する必要はありません。


すべては問題ありません。私は、私が不可能なものが欲しいと思っただけです。私は無名関数を宣言して同じ場所で実行したかったのです。注:DIRECT宣言とDIRECT呼び出しは汎用ラッパーなしで呼び出されます。

// flash-like (as3) code /// DOES NOT COMPILE 
makeOutput( (function : int(){ return 0; })() ); 
+1

を助けることを願っています。いくつかのpsudocodeを言い換えたり使うことができますか? –

+0

パラメータタイプを変更したいのはなぜですか? – SLaks

+0

彼はときどき 'int'だけを使いたいかもしれないので? – Vercas

答えて

30

はい。
デリゲートと呼ばれています。

デリゲートは(多かれ少なかれ)通常タイプです。それらを他のタイプと同様に関数に渡すことができます。

void makeOutput(Func<int> param) { 
    Console.WriteLine(param()); 
} 

makeOutput(delegate { return 4; }); 
makeOutput(() => { return 4; }); 
makeOutput(() => 4); 

あなた編集編の質問は意味がありません。

C#は型セーフです。
メソッドがパラメータとして関数を必要としない場合は、パラメータとしてメソッドを渡すことはできません。

5
void makeOutput(Func<int> _param) 
{ 
    makeOutput(_param()); 
} 

void makeOutput(int _param) 
{ 
    Console.WriteLine(_param.ToString()); 
} 

これはトリックを行うことができます!
これは単純な方法です:オーバーロード!

+0

@Fockerこれは役に立ちますか? – Vercas

4

私は私の道を示し、同様の問題や友人を持っていた:

makeOutput((new Func<Int32>(() => { return 0; })).Invoke()); 

が、これは私が質問を理解しない

関連する問題