在lambda中调用Func <string,object> </string,object>

时间:2013-02-15 21:28:57

标签: c#

我很困惑,为什么我不能将其称为函数,我如何让自己将其称为函数?

Error   1   'fn' is a 'variable' but is used like a 'method'

来源

Func<List<object>, List<object>, Func<string, object>> test;
test = (ls, fn) => fn(null);

4 个答案:

答案 0 :(得分:11)

  

我很困惑。

是的。让我们不相信你。

  

这有什么问题?

Func<List<object>, List<object>, Func<string, object>> test;
test = (ls, fn) => fn(null);

这表示test是一个函数,它接受两个列表并从一个字符串返回一个函数。列表为lsfn。所以fn的类型是List<object>,这不是可以调用的东西。

也许您应该描述一下您在这里要做的事情,因为代码中并不清楚。

  

它假设接收List<object>Func<string, object>并返回List<object>

我认为这不对,因为你想调用该函数并返回List<object>,但Func<string, object>会返回object }。

也许你打算写的是

Func<List<object>, Func<string, List<object>>, List<object>> test;
test = (ls, fn) => fn(null);

现在ls的类型为List<object>fn的类型为Func<string, List<object>>。因此,在调用fn时,它会根据List<object>的要求返回test

有意义吗?

请记住,在Func<A, B, R>中,A和B是参数类型,R是返回类型。

答案 1 :(得分:3)

您可能需要以下

Func<List<object>, Func<string, List<object>>, List<object>> test;

Func<List<object>, Func<string, object>, object> test;

让它工作

test = (ls, fn) => fn(null);

答案 2 :(得分:0)

您可能需要以下内容:

    static void Main(string[] args)
    {
        Func<List<object>, List<object>, Func<string, object>> test = Test;

    }

    private static Func<string, object> Test(List<object> objects, List<object> list)
    {
        throw new NotImplementedException();
    }

答案 3 :(得分:0)

我不知道你想要什么,但这个编译和工作:

public void SomeMethod()
{
    Func<List<object>, List<object>, Func<string, object>> test = (a, b) => 
    {
        a = b;
        return AnotherMethod;
    };
}

public object AnotherMethod(string value)
{
    return (object)value;
}