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>); 
    } 
} 

voglio chiamarlo cosìCome posso passare un parametro in Azione?

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

L'idea è superare ogni comprendono al metodo.

+0

È il vostro 'Action' solo un' Action' o è un 'azione ' o qualsiasi altra variazione? Quanti parametri vuoi? – BoltClock

+1

Domanda aggiornata – Jop

+0

Sembra che tu stia già passando gli include tramite l'argomento 'includes'. L'idea che vuoi passare ogni membro della lista 'include' a' action'? In questo caso, passa '_context.Cars.Include' (senza parentesi). – itowlson

risposta

61

Se si conosce quale parametro si desidera passare, prendere un Action<T> per il tipo. Esempio:

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

Se si desidera che il parametro da passare al metodo, rendono il metodo generico:

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

E il codice chiamante:

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

Update. Il codice dovrebbe essere simile:

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

l'idea è di passare ogni inclusione al metodo _context.Cars.Include() – Jop

+0

Con questo codice (codice da Update) Errore di ricezione: 'Sistema .Data.Objects.ObjectQuery System.Data.Objects.ObjectQuery .Include (string) 'ha il tipo di ritorno errato – Jop

+0

@jop Aggiornato, Crea un nuovo 'Azione ' delegato che chiama "Cars.Include". In alternativa, il metodo di inclusione personalizzato potrebbe accettare una stringa 'Func <, qualunque sia il tipo Cars.Include() restituisce>' –

9

Si sta cercando Action<T>, che accetta un parametro.

+0

Si potrebbe voler aggiungere un secondo 'T'. – SLaks

+0

l'idea è di passare ogni inclusione al metodo _context.Cars.Include() – Jop

5

sporco trucco: Si potrebbe anche usare un'espressione lambda per passare qualsiasi codice che si desidera tra cui la chiamata con parametri.

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