2017-07-11 11 views
1
に渡す

私はメソッドを作成し、C#ラムダ式の理解を真っ直ぐにしようとしています。ベローは私のバックグラウンド更新メソッドへの呼び出しです。それは、各ファイルをダウンロードし、以下に示すラムダ式形式で提供されたアクションを呼び出すタスクを実行します。これを考え出すラムダ式のパラメータをアクションパラメータ

await BackgroundDownload((ParamOne, ParamTwo) => { 
    // Update file downloaded count 
    // Update file progress bar     
}); 

私の闘争は、私は私のコードでそれらを参照することができるような上記のように、私はラムダ式の私の行動にパラメータを提供しますどのようにでしょうか?

編集:私は宣言

方法:

この方法その後、呼び出します。

progressUpdate(itemsToDownload.Count, (int)(current * 100/response.ContentLength)); 
+1

を、それを使用しますが、パラメータを参照したい場合、それらはクラスではなく構造体でなければなりません。 – juharr

+0

私は実際にラムダ式で自分のパラメタを参照することができ、私のメソッドのアクションパラメータの要件を満たすことができます – visc

+0

BackgroundDownloadの{}内で 'ParamOne'と' ParamTwo'を使うことができますParamOneの数とAの2番目の '(int)(Current * 100/response.ContentLength)の割合 ' –

答えて

0

をちょうど通常として名前を付けます。

方法は次のように定義されている場合:

public void executeAction(Action<int, int> action) { } 

次のような名前のパラメータを持つラムダアクションを作成することができます

int c; 
executeAction((int a, int b) => { c = a + b; }); 

それとも

ようなものになるだろうあなたのケースでは
await BackgroundDownload((int count, int progress) => { 
    // Update file downloaded count 
    this.FileCount = count; 
    // Update file progress bar     
    this.Progress = progress; 
}); 

ラムバ式では、ラムダ式が呼び出されます。

1

ラムダ式で変数を使用するだけです。

});

またはメソッド

public static void UpdateResult(int filesCount, int fileProgress) 
{ 
    //Update Progress 
} 

を作成して、代わりにラムダ

await BackgroundDownload(UpdateResult);