protected void Page_Load(object sender, EventArgs e)
{
int k = 0;
Func<int> p5 =() => { return k++; };
}
public int IntProducer()
{
return x++;
}
我無法調用函數IntProducer(),語法錯誤嗎?無法使用FUNC調用函數
protected void Page_Load(object sender, EventArgs e)
{
int k = 0;
Func<int> p5 =() => { return k++; };
}
public int IntProducer()
{
return x++;
}
我無法調用函數IntProducer(),語法錯誤嗎?無法使用FUNC調用函數
你永遠無法調用該函數,因爲你從來沒有試圖直接或間接地調用它。
如果您想調用它,首先必須將函數存儲在變量中,然後像調用其他任何方法一樣調用變量。
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
}
我不知道你實際上試圖完成的任務,但你並不需要一個Func<T>
調用的函數。如果你發現你明白這真的很好,感覺你實際上有需要的Func<T>
,那麼你可以指定它,並把它像它是一個
protected void Page_Load(object sender, EventArgs e)
{
int k = IntProducer();
// Todo: Do more with k here
}
public int IntProducer()
{
return x++;
}
:只要使用此語法正常功能:
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
,就像我答案頂部的代碼一樣。
順便說一句,這是你的原代碼拉姆達:
() => { return k; };
它基本上就像一個未命名的功能。在這種情況下,該函數不帶參數。
第一個版本很好。第二個版本將起作用,但沒有意義,甚至可能更令人困惑...... –
感謝Merlyn Morgan-Graham的偉大工程。 – happysmile