2011-11-14 24 views
5

Tengo el siguiente método que no puedo averiguar la sintaxis correcta para llamar:C# Acción <> con Func <> parámetro

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

Estoy intentando llamar así:

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

Editado: Gracias a todos, ustedes ayudaron a encender una bombilla en mi cabeza. esto es lo que hice:

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

no estoy seguro de por qué incluso un problema con esto. es uno de esos días, supongo ..

THX

Respuesta

2

sola observación de la descripción anterior, parece que la llamada debe ser:

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

La clave está ya estás pasando un Action que toma un Func, la persona que llama es (muy probablemente) la que pasa ese Func en su Action. Así que solo especifica cómo se aplica Func a la secuencia que se pasa (si estoy leyendo el prototipo correctamente).

+0

esto ayudó a darme cuenta de lo que estaba haciendo mal – emer

+0

@emer: Glad to help! –

3

Su sintaxis lambda es totalmente equivocado.

Es necesario crear una sola expresión lambda con dos parámetros:

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

En este momento la función sólo está aceptando un solo argumento, cuando se pide para dos!

tiene que aceptar un argumento lista, como (list, id) => {}

2
var obj = MyClass.GetAndProcessDependants<int>(
    () => DateTime.Now, 
    (someList, id) => DoSomething(x) 
); 
Cuestiones relacionadas