2011-08-16 60 views
3

我想學習C#和MVC3。我想有一列的WebGrid作爲Html.Action鏈接,但是,它不會工作,直到我這樣做:「(item)=>」做什麼?

grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.Id })) 

所以我知道這個修復它,但爲什麼呢? (項目)看起來像一個演員,但是=>是什麼?從閱讀其他問題我發現,出於某種原因這樣做顯然不好 - 爲什麼?

+2

這是不壞的使用lambda表達式。 – driis

+0

這樣做不錯。 – recursive

+0

謝謝你們。 [這個]的答案(http://stackoverflow.com/questions/6167903/using-data-in-a-html-actionlink-inside-a-webgrid-column-not-possible)問題是我擔心的。 – BenGC

回答

8

這被稱爲C#中的lambda表達式/匿名函數。 ()部分是參數列表,=>指示右側是拉姆達的主體/表達式。

這裏有一個稍微展開的形式可以是有點清晰

Func<ItemType, string> linkFunction = (item) => 
{ 
    return Html.ActionLink("Edit", "Edit", new { id = item.Id }); 
}; 
+0

我認爲你可以放棄「/匿名功能」。我認爲只是lambda表達式更正確。 –

+0

@ justin.m.chase匿名函數更具包容性,因爲它涵蓋了lambda表達式和匿名方法 – JaredPar

7

這將是一個lambda expression。不,使用拉姆達不壞,這是一件(非常)好事。

+0

@安德魯,爲什麼過分熱心編輯? – RichK

+0

@RichK:我提出了答案,但刪除了「MSDN是你的朋友」,因爲它給優秀的答案增加了一種居高臨下的語氣。 –

+0

啊,看起來我可能已經用我原來的編輯跺出克勞斯的額外句子了。對不起,:) :) –