如何从`new Func <t>(){...}获得结果?`</t>

时间:2014-05-10 08:43:33

标签: c# .net

为什么这些会打印不同的东西?

我们说我有这样的课程:

public class ExampleOfFunc
{
    public int Addition(Func<int> additionImplementor)
    {
        if (additionImplementor != null)
            return additionImplementor();
        return default(int);
    }
}

Main方法中:

这会打印200

ExampleOfFunc exampleOfFunc = new ExampleOfFunc();
Console.WriteLine("{0}", exampleOfFunc.Addition(
     () =>
     {
         return 100 + 100;
     }));  // Prints 200

但这会打印Prints System.Func'1[System.Int32]

Console.WriteLine("{0}", new Func<int>(
    () =>
    {
        return 100 + 100;
    }));  // Prints System.Func`1[System.Int32]

3 个答案:

答案 0 :(得分:6)

这一行

return additionImplementor();

调用函数并返回其结果,然后将结果传递给Console.WriteLine()

这一行

Console.WriteLine("{0}", new Func<int>(
    () =>
    {
        return 100 + 100;
    }
));

只是将函数传递给Console.WriteLine()而不调用它。添加()以执行该功能,然后将其打印出来......

Console.WriteLine("{0}", new Func<int>(
    () =>
    {
        return 100 + 100;
    }
)());

Fiddle

答案 1 :(得分:4)

在第二个示例中,您只将匿名函数作为参数提供给Console.WriteLine。你实际上并没有调用这个函数。

答案 2 :(得分:0)

想象一下,有五十个类和函数,例如ExampleOfFunc.Addition。编译器如何知道您的功能?你必须明确告诉它。