2016-04-07 10 views
0

私はこれを検索しましたが、これまでのところ答えを得るための質問の語り方はわかりませんが、ラムダのネストされたアクションでは何も見つかりません表現。私はラムダ式をパラメータとして渡すことに多くの助けを見つけることができます。パラメータはデリゲートであり、実際には私のコードで多くのことをしています。それは私に問題を与えているネストされたラムダ式です。アクション<アクション<string,int>>とC#のラムダ式

私はタイプ

Action<Action<string,int>> myAction 

のプロパティを持つクラスを持っていると私は、ラムダ式でそれを割り当てます。ラムダ式を使わずに、コード内の他の場所にある実際のメソッドを使用して実行できます。私はまた、簡単な何かを行うことができます

myAction = ((a) => { a("a string", 0); }); 

私はサブアクションと1つのラムダでアクションをasignしたいと思います。何かのように...

myAction = (((s,i)=>{//sub-action body here})=> { //do something here}); 

しかし、この構文は機能しません。これを行う方法はありますか、または私は事前に自分のメソッドを定義しておかなければいけませんか?

+0

引数を無視し、私は理解していない何をしたいですそれを割り当てるのが好きです。 –

+0

私はなぜそれをすることができないのかについてたくさん考えなければなりませんでした。答えは、パラメータを持たないが、 'myAction'プロパティに格納されているメソッドを呼び出すメソッド(上記には示していません)を呼び出していることです。 myActionは、サブアクションに渡すs&iパラメータを知る必要があります。私がこのmyActionを使用するほとんどの場合、サブアクションは別の場所で定義され、メソッドとして完全に書き出されますが、ここでは2つを定義する必要があり、ラムダ式を使用してその簡潔さを保ち、書き出しを避けることを望んでいます完全な方法。以下のTsayperのソリューションは、私が必要とするものを手に入れているようです。 – RosieC

答えて

1
 Action<Action<string, int>> myAction = a => (new Action<string, int>((s, i) => Console.WriteLine(i + s)))("hello", 1); 
     myAction(null); //1hello 
     Console.ReadLine(); 

しかしその同じ

 Action<Action<string, int>> myAction = a => Console.Writeline("1hello"); 

にあなただけのサブアクションは、入力パラメータとしてアクションに渡され

+0

ありがとうございます:)私はこれが私が探しているものだと確信しています。私は他のコードと一緒にたくさんのテストを実行しました。そして、私が望むように動作しているようです。はい、あなたの例では単純化することができますが、私の場合、私が望む振る舞いは、あなたが与えた最初の例に似たものが必要です。私はもう少しテストをしていますが、これを済ませたら、これが受け入れられる答えになると思います。 – RosieC

+0

私は今あなたの単純化された例のように簡単だと思っています。私は同じ場所に両方を指定しているので、myActionを簡単に指定するのが理にかなっています。私は2つのアクションを別々に定義できるようにしていますが、この場合は2つのレベルは必要ありません。したがって、このソリューションはサブアクションを効果的に無視し、myActionは代わりにそのすべてを行います。一方、lambdaを使用してs&iパラメータに値を設定したい場合(サブアクションを上書きしない場合)、私の質問の中間コードを使用することができます。私は簡単なフォームに私の要件を沸かせるのを助けてくれてありがとう:) – RosieC

関連する問題