protected void Page_Load(object sender, EventArgs e)
{
int k = 0;
Func<int> p5 = () => { return k++; };
}
public int IntProducer()
{
return x++;
}
我无法调用函数IntProducer(),语法错误了吗?
答案 0 :(得分:1)
你永远无法调用该函数,因为你从未试图直接或间接调用它。
如果你想调用它,首先必须将函数存储在变量中,然后调用变量,就像你使用任何其他方法一样。
protected void Page_Load(object sender, EventArgs e)
{
Func<int> producer = IntProducer; // store it
int result = producer(); // call it
}
或者你可以创建一个lambda函数来调用它。
protected void Page_Load(object sender, EventArgs e)
{
Func<int> producer = () => IntProducer(); // store the lambda
int result = producer(); // call it
}
答案 1 :(得分:0)
我不确定你实际想要完成什么,但是你不需要Func<T>
来调用一个函数。只需使用以下语法:
protected void Page_Load(object sender, EventArgs e)
{
int k = IntProducer();
// Todo: Do more with k here
}
public int IntProducer()
{
return x++;
}
如果您发现自己非常了解这一点,并且觉得实际需要Func<T>
,那么您只需分配它,并将其称为,就像这是一个正常的功能:
protected void Page_Load(object sender, EventArgs e)
{
Func<int> theFunc = IntProducer;
// Todo: Do some stuff here
int k = theFunc(); // Calls `IntProducer`
// Todo: Do more with k here
}
public int IntProducer()
{
return x++;
}
这非常有用,如果你想在运行时切换theFunc
指向哪个方法,你想将它传递给另一个方法,或者你甚至不想打扰命名 IntProducer
,只想直接定义它(就像原始代码中的lambda一样)。
根据你的问题中的代码,我会抛弃lambda,而不会打扰Func<T>
。我只是直接拨打IntProducer
,就像我答案顶部的代码一样。
BTW,这是原始代码中的lambda:
() => { return k; };
它基本上像一个未命名的函数。在这种情况下,该函数不带参数。