2016-04-04 5 views
0

この質問は申し訳ありません。ラムダ式は何とか新しいことです。 私はライブラリといくつかの関数を持っていて、いくつかのアクションを実行するために渡したいと思います。したがって、私はlamba式にいくつかのコードを入れ、それを変数に関連づけて、ライブラリs/rから実行させることを考えました。短い(擬似コード)で :ラムダ式を変数に入れて、それをs/rに渡す方法

var1 = { ...code1...}; 
var2 = { ...code2...}; 
ExternalFunction(??? var1, ??? var2); 


ExternalFunc(??? var1, ???var2) 
{ 
    Console.WriteLine("Executing code 1"); 
    ??? 

    Console.WriteLine("Executing code 2"); 
    ??? 
} 
+2

"a s/r"とは何ですか? –

+0

ソフトウェアルーチン – Luca

+0

あなたは次のような意味ですか? '' var1 =()=> {... code1 ...}; アクションvar2 =()=> {... code2 ...}; ExternalFunction(var1、var2); 'メソッドが' static void ExternalFunc(Action var1、Action var2){Console.WriteLine( "Executing code 1");}として宣言されています。 var1(); Console.WriteLine( "コード2を実行中"); var2(); } '。ここの型の 'Action'は、署名がパラメータの空のリストで、戻り型が' void'のデリゲート型です。 –

答えて

1

あなたのコードは、あなたがタイプAction<T1, T2, ...>またはFunc<T1, T2, ...>のパラメータが必要になります何をすべきかに応じて。ただし、任意のコードを実行するメソッドを作成することはできません。戻り値の型とパラメーターを提供する必要があります。だから、

ブロックのあなたのコードはintを返し、あなたがこの書き込み可能文字列を期待していた場合:あなたは、このコードを実行することを期待することはできませんしかし

ExternalFunc(myFunc, "1"); 

:今

Func<string, int> myFunc = x => Convert.ToInt32(x) + 1; 

void ExternalFunc(Func<T1, T2> myFunc, T1 param) { 
    var myInt = myFunc(param); 
} 

はこのようにそれを呼び出しますまた:

Func<int> myOtherFunc =() => 1; 
ExternalFunc(myOtherFunc) 

myOtherFuncのでなし、タイプFunc<T1, T2>でなければなりません。 Func<T>ExternalFuncに渡すだけです。

また、コードブロックに何も返さない場合(void)、Func<...>の代わりにAction<...>を使用してください。

関連する問題