77 votes

Comment passer un paramètre dans Action ?

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

je veux l'appeler comme ça

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

L'idée est de passer chaque inclusion à la méthode.

114voto

The Scrum Meister Points 17215

Si vous savez quel paramètre vous voulez passer, prenez un Action<T> pour le type. Exemple:

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

Si vous souhaitez que le paramètre soit passé à votre méthode, rendez la méthode générique :

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

Et le code de l'appelant :

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

Mettre à jour. Votre code devrait ressembler à :

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

15voto

SLaks Points 391154

Vous recherchez Action<T> , qui prend un paramètre.

10voto

ne2dmar Points 414

Sale astuce : vous pouvez également utiliser l'expression lambda pour transmettre le code de votre choix, y compris l'appel avec des paramètres.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X