2011-11-14 15 views
5

Mam następujący sposób, że nie mogę dowiedzieć się poprawnej składni zadzwonić:C# Action <> z <> parametr Func

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

staram się nazwać tak:

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

Edytowane: thx wszystkim, chłopaki pomogli włączyć żarówkę w mojej głowie. Oto, co zrobiłem:

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

nie wiem, dlaczego nawet problem z tym. jest to jeden z tych dni, myślę, ..

thx

Odpowiedz

2

Po prostu patrząc na powyższym opisie, wygląda na to wezwanie powinno być:

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

Kluczem jest, ponieważ jesteś przechodząc Action który zajmuje Func, wywołujący (najprawdopodobniej) będzie tym, który przejdzie Func do twojego Action. Więc po prostu określ, w jaki sposób ta Func jest zastosowana do przekazanej sekwencji (jeśli poprawnie odczytuję prototyp).

+0

Pomogło mi to zrozumieć, co robiłem źle – emer

+0

@emer: Cieszę się, że mogę pomóc! –

3

składni lambda jest całkowicie błędne.

Trzeba stworzyć pojedynczy wyraz lambda z dwoma parametrami:

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

Teraz funkcja przyjmuje tylko jeden argument, gdy prosi o dwóch!

Musisz zaakceptować listę argumentów, takich jak (list, id) => {}

2
var obj = MyClass.GetAndProcessDependants<int>(
    () => DateTime.Now, 
    (someList, id) => DoSomething(x) 
); 
Powiązane problemy