为什么这些会打印不同的东西?
我们说我有这样的课程:
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]
答案 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;
}
)());
答案 1 :(得分:4)
在第二个示例中,您只将匿名函数作为参数提供给Console.WriteLine。你实际上并没有调用这个函数。
答案 2 :(得分:0)
想象一下,有五十个类和函数,例如ExampleOfFunc.Addition
。编译器如何知道您的功能?你必须明确告诉它。