VS 2010 和 .NET 4.0 系列之《 C# 4 中的選擇性參數和具名參數設定(以及ASP.NET MVC 2中的一個很酷的場景)》篇

  • 23455
  • 0
  • 2011-07-02

摘要:VS 2010 和 .NET 4.0 系列之《 C# 4 中的選擇性參數和具名參數設定(以及ASP.NET MVC 2中的一個很酷的場景)》篇

【原文位址】 Optional Parameters and Named Arguments in C# 4 (and a cool scenario w/ ASP.NET MVC 2)
【原文發表日期】 Friday, April 02, 2010 1:28 AM

除了寫部落格外,我現在還使用Twitter發短貼和共享連結。請透過twitter.com/scottgu跟隨我。

這是我針對即將發佈的VS 2010 和 .NET 4所撰寫的 文章系列的第十七篇。

今天的文章討論新加到C# 4.0中的2個語言特性: 選擇性參數(optional parameters)和具名參數設定(named arguments),以及在ASP.NET MVC 2(VB 和 C#)中一種利用選擇性參數的很酷的方式。

C# 4.0中的選擇性參數

C# 4.0現在對方法,構造器,以及索引器支援使用可預設的參數(註:VB支援選擇性參數可是有年頭了)。

當參數的預設值作為宣告的一部分被指定的時候,參數就是可預設的。例如,下面這個方法接受2個參數,一個「category」 字串參數,另一個「pageIndex」整數參數。「pageIndex」參數有一個預設值 0,它因此是一個可預設的參數:

image

當叫用上面的方法時,我們可以明確地傳遞2個參數給它:

image

或者我們可以省略掉傳遞第二個參數,在這樣的情形下,其預設值0就會被傳進去:

image

注意,VS 2010的Intellisense在顯示語句完成時,會表示哪個參數是可預設的,以及它的預設值:

image

C# 4.0中的具名參數設定和選擇性參數

C# 4.0現在還支援「具名參數設定」的概念。這允許你把傳給一個方法的參數明確地命名,而不是透過實際參數的位置來識別它。

例如:我可以編寫下面這樣的程式碼,透過其名稱來識別傳給GetProductsByCategory方法的第二個參數(將其用法變得更為明確一點):

image

當一個方法支援多個選擇性參數,而你想要指定在傳遞哪個實際參數時,具名參數設定會非常有用。例如,下面我們有一個DoSomething方法,其接受2個選擇性參數:

image

我們可以使用具名參數設定,以下面任何一種方式來叫用上面這個方法:

image

因為2個參數都是可預設的,在只有1個(或者0個)參數被指定的情形下,那個沒被指定的參數的預設值就會被傳進去。

ASP.NET MVC 2 和選擇性參數

有一個非常棒的使用場景,我們可以在其中利用VB 和 C#中選擇性參數支援,那就是ASP.NET MVC 2中控制器類上的Action方法的輸入繫結支援。

例如,考慮一個我們想要把「Products/Browse/Beverages」 或 「Products/Browse/Deserts」這樣的URL映射到一個控制器action方法的場景。我們可以編寫一個URL導向規則,將URL映射到一個方法上,像這樣:

image

然後,我們可以選擇使用一個「page」查詢字串值來表示由Browse方法顯示的結果是否應該是分頁的,如果是分頁的,應該顯示結果的哪一頁。例如,/Products/Browse/Beverages?page=2。

在 ASP.NET MVC 1中,你一般這樣處理,在action方法上添加一個「page」 參數,將其設置為 nullable int (意味著如果「page」查詢字串值不存在的話,其值就是null)。然後你可以編寫像下面這樣的程式碼,將 nullable int 轉換成一個 int,如果查詢字串中不存在值的話,就賦予一個預設值:

image

在ASP.NET MVC 2中,你現在可以利用VB 和 C#中的選擇性參數支援,來更簡明,更清晰地表達這個行為。只要將action方法的參數宣告為帶預設值的選擇性參數即可:

C#

image

VB

image

如果查詢字串有「page」 值的話(例如 /Products/Browse/Beverages?page=22 ),它就會以一個整數傳給該action方法。如果查詢字串沒有「page」 值的話 (
例如 /Products/Browse/Beverages),預設值0就會被傳給該action方法。這使得程式碼更加簡明,可讀性也提高了。

結語

VS 2010 中的 C# 和 VB 帶有一堆很棒的新語言特性。上述2個特性(選擇性參數和具名參數設定)是其中2個而已,在以後我還會在部落格中討論更多其他的新特性。

如果你在尋找一本總結了C#中所有語言特性(包括C# 4.0中的),以及對核心.NET類別庫有很好的概述的好書的話,你也許應該查閱一下 O』Reilly出版社新出版的《C# 4.0 in a Nutshell》一書:

image

該書以例程搜尋方便的格式,封裝了大量的內容。

希望本文對你有所幫助,

Scott