C#动作<>与Func<>参数

时间:2011-11-14 18:39:12

标签: c# action func

我有以下方法无法找出正确的语法来调用:

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 个答案:

答案 0 :(得分:3)

你的lambda语法是完全错误的。

您需要使用两个参数创建单个 lambda表达式:

(list, id) => DoSomething(...)

答案 1 :(得分:3)

现在该函数只接受一个参数,当它要求两个时!

您需要接受列表参数,例如(list, id) => {}

答案 2 :(得分:2)

只看上面的描述,看起来应该是:

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

关键是,因为您传递的Action传递Func,所以调用者(很可能)将Func传递到Action Func }。所以你只需指定{{1}}如何应用于传入的序列(如果我正确读取原型)。

答案 3 :(得分:2)

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