1
我有一個接受一個函數功能的方法:爲什麼會收到「不是所有的代碼路徑返回一個值誤差」的Func鍵代表
private void testFuncCallBack(Func<string> funcDelegate)
{
//Some Code
}
現在我想打個電話傳遞一個FUNC作爲參數:
testFuncCallBack(() =>{"";});
現在我得到一個錯誤,說不是所有的代碼路徑都返回一個值。但只要我刪除大括號和;
它工作正常。
爲什麼Func不能用花括號進行編譯。
同一作品有雖然行動:
private void testActionCallBack(Action actionDelegate)
{
//Some Code
}
testActionCallBack(() => { int x = 10; });
正確的調用是testFuncCallBack(delegate(){return「」;});就我所給出的明顯錯誤答案而言,我不瞭解確切的情況,因此我不會將其作爲答案。只是FYI在我以前的推理中的錯誤是認爲Func funcDelegate表示一個void將一個字符串作爲參數,而不是它實際是什麼:一個沒有參數的字符串函數。對於錯誤信息抱歉。從邏輯上講,這不是來自我自己的經驗(我很少使用Func <>)的答案,而是來自一個糟糕的快速研究,道歉。 –
varocarbas
@varocarbas,不是問題,剛剛發現,當我們在花括號內放置東西時,它就變成了一種陳述而不是一種表達。所以我們可以把它寫成testFuncCallBack(()=>「」);或者testFuncCallBack(()=> {return「」;});.所以在後面的情況下,如果它是一個聲明,最好是返回一些值。 – Simsons
感謝您的正確解釋。直覺上,我明白,在大括號內,您必須包含必須分配給給定變量的所有信息(例如,int x = 10;作爲動作;或{1,2,3}作爲整數)。因此,我從一開始就明白,關聯「」;整個代表聽起來不太合適。在進行預研究時,我確實找到了我發佈的鏈接+有時候我有點浮躁......並且在這裏你看到了結果:)(我在stackoverflow上是新的,並且仍在學習停止這些事情)。 – varocarbas