2013-07-12 19 views
1

我有一個接受一個函數功能的方法:爲什麼會收到「不是所有的代碼路徑返回一個值誤差」的Func鍵代表

private void testFuncCallBack(Func<string> funcDelegate) 
     { 
      //Some Code 
     } 

現在我想打個電話傳遞一個FUNC作爲參數:

testFuncCallBack(() =>{"";}); 

現在我得到一個錯誤,說不是所有的代碼路徑都返回一個值。但只要我刪除大括號和;它工作正常。

爲什麼Func不能用花括號進行編譯。

同一作品有雖然行動:

private void testActionCallBack(Action actionDelegate) 
     { 
      //Some Code 
     } 
testActionCallBack(() => { int x = 10; }); 
+0

正確的調用是testFuncCallBack(delegate(){return「」;});就我所給出的明顯錯誤答案而言,我不瞭解確切的情況,因此我不會將其作爲答案。只是FYI在我以前的推理中的錯誤是認爲Func funcDelegate表示一個void將一個字符串作爲參數,而不是它實際是什麼:一個沒有參數的字符串函數。對於錯誤信息抱歉。從邏輯上講,這不是來自我自己的經驗(我很少使用Func <>)的答案,而是來自一個糟糕的快速研究,道歉。 – varocarbas

+0

@varocarbas,不是問題,剛剛發現,當我們在花括號內放置東西時,它就變成了一種陳述而不是一種表達。所以我們可以把它寫成testFuncCallBack(()=>「」);或者testFuncCallBack(()=> {return「」;});.所以在後面的情況下,如果它是一個聲明,最好是返回一些值。 – Simsons

+0

感謝您的正確解釋。直覺上,我明白,在大括號內,您必須包含必須分配給給定變量的所有信息(例如,int x = 10;作爲動作;或{1,2,3}作爲整數)。因此,我從一開始就明白,關聯「」;整個代表聽起來不太合適。在進行預研究時,我確實找到了我發佈的鏈接+有時候我有點浮躁......並且在這裏你看到了結果:)(我在stackoverflow上是新的,並且仍在學習停止這些事情)。 – varocarbas

回答

0

當我們寫花括號裏面的東西,然後就變成了聲明,而不是一個表達式。

在這種情況下,當我們談論lambda表達式時,表達式=>「」將返回「」。但如果我們想發表聲明,那麼聲明必須完成並返回;

所以我們可以把它寫成testFuncCallBack(() =>"");或testFuncCallBack(() =>{ return "";});。所以在後面的情況下,如果它是一個聲明,最好是返回一些值。

相關問題