2011-11-14 8 views
5

私は私がコールする正しい構文を把握することはできません以下の方法があります。C#アクション<><>パラメータ

public T GetAndProcessDependants<C>(Func<object> aquire, 
    Action<IEnumerable<C>, Func<C, object>> dependencyAction) {} 

を私はこのようにそれを呼び出すようにしようとしている:

var obj = MyClass.GetAndProcessDependants<int>(() => DateTime.Now, 
    (() => someList, (id) => { return DoSomething(x); }) } 

編集: 皆さん、みんな、私の頭の中で電球をオンにしました。ここに私は何をしたのですか:

var obj = MyClass.GetAndProcessDependants<int>(
      () => DateTime.Now, 
      (list, f) => 
      { 
       list = someList; 
       f = id => { return DoSomething(id); }; 
      }); 

なぜ私はこれも問題です。それは

答えて

2

として

あなたは、リストの引数を受け入れる必要があり、それがあるべき呼び出しのように見えますそのうちFuncが必要な場合は、にFuncを呼び出した発信者が(ほとんどの場合)発信者になります。だから、Funcが渡されるシーケンスにどのように適用されるかを指定するだけです(私がプロトタイプを正しく読んでいる場合)。

+0

これは私が間違っていたことを理解するのに役立ちました – emer

+0

@emer:喜んで助けてください! –

3

あなたのラムダ構文は完全に間違っている

THX ..私は推測当時の一つです。

次の2つのパラメータで単一ラムダ式を作成する必要があります。

(list, id) => DoSomething(...) 
3

を今機能は2つだけのためにそれを要求したときに、単一の引数を受け入れています!あなたがActionを渡しているので、キーがある

var obj = MyClass.GetAndProcessDependants<int>(() => DateTime.Now, 
    (seq, fun) => { /* do something with seq and fun */ }); 

:ちょうど上記の説明を見て、このような(list, id) => {}

2
var obj = MyClass.GetAndProcessDependants<int>(
    () => DateTime.Now, 
    (someList, id) => DoSomething(x) 
); 
関連する問題