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

21 篇文章 0 订阅

今天介绍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的很棒的语言特性。上面两个特性(可选参数和命名参数)只是其中的两个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值