WEB开发网
开发学院软件开发C语言 稍加改进的Switch/Case扩展方法 阅读

稍加改进的Switch/Case扩展方法

 2010-09-30 21:05:29 来源:WEB开发网   
核心提示: 因为在Switch()方法里没有显式声明任何类型,所以这个返回类型推导工作被延后到首次书写CaseReturn方法时完成,稍加改进的Switch/Case扩展方法(5),Switch的有参数重载形式不具备此延迟推导特性, 如果一直没有书写CaseReturn方法,而不是在代码页中上翻下抄瞎忙活,

因为在Switch()方法里没有显式声明任何类型,所以这个返回类型推导工作被延后到首次书写CaseReturn方法时完成。

Switch的有参数重载形式不具备此延迟推导特性。

如果一直没有书写CaseReturn方法,那么在书写DefaultRun方法后,方法链将结束,无法书写后续的方法链,也无法获取返回结果。

这个设计是很自然的,因为其后书写什么都没有什么实际意义了,这里提示出来就是怕不知道的人误以为是BUG。

不只是替代switch

由于这个Switch扩展方案支持传入表达式做判定和执行,所以它还完全可以用于替代if……else if……else语句,比如下面代码中,底部的那段代码与注释掉的那段代码就是等价的:

var str = "test";
var on=true;
var day = DateTime.Today;
//if (str.StartsWith("t") && on) str = "1";
//else if (str.Length > 9) str = "2";
//else if (str == "none") { str = "3"; on = false; }
//else if (day < DateTime.Now) str = "4";
//else on = false;
str.Switch()
    .CaseRun(f => f.StartsWith("t") && on, f => str = "1")
    .CaseRun(f => f.Length > 9, f => str = "2")
    .CaseRun("none", f => { str = "3"; on = false; })
    .CaseRun(f => day < DateTime.Now, f => str = "4")
    .DefaultRun(f => on = false);

扩展的意义

这样的扩展除了让代码显得更复杂以衬托出作者之牛B深奥之外,还有什么优点?

优点就是能在单句Lambda表达式中使用,这样就能让你更深奥一层……

哈哈,玩笑,不只是单句Lambda表达式,在充当方法的参数时,三元表达式又不够用的情况下,这样的扩展就大有用武之地了,你可以不必大费周章地再去定义临时的变量并给它赋值,或者专门建立一个方法来解决这类简单的判别问题。

它的形式可能不算优雅,但它能够让你的代码结构变得优雅一些,并让你专注于解决手头的问题,而不是在代码页中上翻下抄瞎忙活。

总结

再次感谢鹤冲天给我们带来了那么多的启示,让我们一同将扩展方法发挥到淋漓尽致吧,这是我们自制的语法糖啊

上一页  1 2 3 4 5 

Tags:稍加 改进 Switch

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接