2011-02-11 26 views
51
private void Include(IList<string> includes, Action action) 
{ 
    if (includes != null) 
    { 
     foreach (var include in includes) 
      action(<add include here>); 
    } 
} 

quiero llamarlo de esa manera¿Cómo puedo pasar un parámetro en acción?

this.Include(includes, _context.Cars.Include(<NEED TO PASS each include to here>)); 

La idea es pasar cada incluyen el método.

+0

Está su '' sólo una action action o es una acción '' o cualquier otra variación? ¿Cuántos parámetros quieres? – BoltClock

+1

Pregunta actualizada – Jop

+0

Parece que ya está pasando el include a través del argumento 'includes'. ¿Es la idea de que quiere pasar cada miembro de la lista 'includes' a' acción'? Si es así, simplemente pase '_context.Cars.Include' (sin corchetes). – itowlson

Respuesta

61

Si sabe qué parámetro desea pasar, tome Action<T> para el tipo. Ejemplo:

void LoopMethod (Action<int> code, int count) { 
    for (int i = 0; i < count; i++) { 
     code(i); 
    } 
} 

Si desea que el parámetro que se pasa a su método, hacen que el método genérico:

void LoopMethod<T> (Action<T> code, int count, T paramater) { 
    for (int i = 0; i < count; i++) { 
     code(paramater); 
    } 
} 

Y el código de llamada:

Action<string> s = Console.WriteLine; 
LoopMethod(s, 10, "Hello World"); 

actualización. El código debería parecerse a:

private void Include(IList<string> includes, Action<string> action) 
{ 
    if (includes != null) 
    { 
     foreach (var include in includes) 
      action(include); 
    } 
} 

public void test() 
{ 
    Action<string> dg = (s) => { 
     _context.Cars.Include(s); 
    }; 
    this.Include(includes, dg); 
} 
+0

la idea es pasar cada include al método _context.Cars.Include() – Jop

+0

Con este código (código de Actualización) Obteniendo el error: 'System .Data.Objects.ObjectQuery System.Data.Objects.ObjectQuery .Include (string) 'tiene el tipo de devolución incorrecto – Jop

+0

@jop Updated, Build a new 'Action ' delegar que llama al 'Cars.Include'. Alternativamente, su método personalizado de inclusión podría aceptar una cadena 'Func <, cualquiera que sea el tipo Cars.Include() returns>' –

9

Está buscando Action<T>, que toma un parámetro.

+0

Es posible que desee agregar un segundo 'T'. – SLaks

+0

la idea es pasar cada include al método _context.Cars.Include() – Jop

5

mala pasada: Usted podría también utilizar la expresión lambda para pasar cualquier código que desee incluyendo la llamada con parámetros.

this.Include(includes,() => 
{ 
    _context.Cars.Include(<parameters>); 
}); 
Cuestiones relacionadas