Подтвердить что ты не робот

Как передать параметр в Action?

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

Я хочу так называть

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

Идея заключается в том, что каждый из них включает метод.

4b9b3361

Ответ 1

Если вы знаете, какой параметр вы хотите передать, возьмите Action<T> для этого типа. Пример:

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

Если вы хотите, чтобы этот параметр был передан вашему методу, выполните общий метод:

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

И код вызывающего абонента:

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

Update. Ваш код должен выглядеть так:

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

Ответ 2

Вы ищете Action<T>, который принимает параметр.

Ответ 3

Грязный трюк. Вы также можете использовать лямбда-выражение для передачи любого кода, который вы хотите, включая вызов с параметрами.

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