VS2010与.NET4系列 17. C#4中的可选参数和命名参数

今天介绍C#4.0中增加的两个新的语言特性――可选参数和命名参数――以及使用ASP.NET MVC2时利用可选参数的一些非常好的场景。

C#4.0中的可选参数

C#4.0 现在支持对方法、构造函数和索引器使用可选参数(注:VB支持可选参数有一段时间了)。

当参数在声明时指定了默认值的时候,它就是可选的。例如,下面的方法有两个参数,"pageIndex" 参数有一个默认值 0,因此是一个可选参数:

image

当调用上面的方法时,可以传递两个参数给它:

image

或者忽略第二个可选参数,此时默认值 0 会传递给它:

image

注意VS2010智能感知在参数是可选的时候会表示出来,并在显示语句完成时显示出默认值:

image

C#4.0中的命名参数和可选参数

C#4.0现在还支持“命名参数”的概念。这就可以显式地为要传递的参数指定名称――而不是只是通过位置标识出来。

例如,可以像下面这样通过名称显式地标识出传递到 GetProductsByCategory 方法的第2个参数:

image

命名参数在方法支持多个可选参数时尤其有用,你可以指定要传递的参数的。例如,下面我们有一个 DoSomething 方法,它有两个可选参数:

image

可以像下面这样使用命名参数以任何方式调用上面的方法:

image

ASP.NET MVC 2 与可选参数

一个良好的利用VB和C#可选参数的使用场景是对ASP.NET MVC2 对Controller类的Action方法的输入绑定支持。

例如,考虑这样一个场景,即我们想把像 "Products/Browse/Beverages" 或 "Products/Browse/Deserts" 这样的URL映射到某个控制器的动作方法上。可以通过编写URL路由规则来把URL映射到类似下面这样的方法上:

image

然后我们可以可选地使用一个 "page" 查询字符串值来表示 Browse 的显示结果是否需要分页――如果需要哪个结果的页面应当显示。例如:/Products/Browse/Beverages?page=2。

使用 ASP.NET MVC1 你通常会通过把 "page" 参数添加到动作方法上来处理这种场景,并指定一个可空的整数(这意味着如果 "page" 查询字符串值没有将会是null)。接着你编写类似下面的代码,将可空的整数转移为整数,并给它指派一个默认值(如果在查询字符串中没有表现):

image

使用ASP.NET MVC2,你现在可以利用VB和C#中支持的可选参数来更加简单明了地展示这种行为。简单地把动作参数声明为带有默认值的可选参数即可:

C#

image

VB

image

如果 "page" 值在查询字符串中有表示(例如,/Products/Browse/Beverages?page=2),那么它会作为整数传递给动作方法。如果"page" 值不在查询字符串中(例如,/Products/Browse/Beverages),那么默认值 0 将会传递给动作方法。这例代码更加简洁更加可读。

总结

有许多增加到C#和VB的很棒的语言特性。上面两个特性(可选参数和命名参数)只是其中的两个。

你可能感兴趣的:(mvc,C#,asp.net,Parameters,Argument,2,Optional,named)