C # Action <> с параметром Func <> - PullRequest
       32

C # Action <> с параметром Func <>

5 голосов
/ 14 ноября 2011

У меня есть следующий метод, который я не могу определить правильный синтаксис для вызова:

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

Я пытаюсь вызвать его так:

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

Отредактировано:спасибо всем, вы, ребята, помогли включить лампочку в моей голове.вот что я сделал:

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

не уверен, почему я даже проблема с этим.это один из тех дней, я думаю ..

thx

Ответы [ 4 ]

3 голосов
/ 14 ноября 2011

Прямо сейчас функция принимает только один аргумент, когда запрашивает два!

Вам необходимо принять аргумент списка, такой как (list, id) => {}

3 голосов
/ 14 ноября 2011

Ваш лямбда-синтаксис совершенно неверен.

Вам необходимо создать одиночное лямбда-выражение с двумя параметрами:

(list, id) => DoSomething(...)
2 голосов
/ 14 ноября 2011
var obj = MyClass.GetAndProcessDependants<int>(
    () => DateTime.Now, 
    (someList, id) => DoSomething(x)
);
2 голосов
/ 14 ноября 2011

Просто глядя на описание выше, похоже, что вызов должен быть:

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

Ключ в том, что вы передаете Action, который принимает Func, вызывающий абонентскорее всего) будет тот, кто передаст это Func в ваше Action.Таким образом, вы просто указываете, как это Func применяется к переданной последовательности (если я правильно читаю прототип).

...