稍加改进的Switch/Case扩展方法
2010-09-30 21:05:29 来源:WEB开发网核心提示: 图片看不清楚?请点击这里查看原图(大图),看高亮部分,稍加改进的Switch/Case扩展方法(2),这个位置的参数只是用来对判断依据进行调整,我觉得完全没有必要,第二个参数是目前的返回结果,并要求该表达式返回经过处理后的结果,写成password.Length.Switch(…&
图片看不清楚?请点击这里查看原图(大图)。
看高亮部分,这个位置的参数只是用来对判断依据进行调整,我觉得完全没有必要,写成password.Length.Switch(……)就行了呀,所以我没有依照此重载方式实现。
以我的实现方式书写的等效代码为:
private static Color GetBackColor2(string password)
{
var r = password.Length.Switch()
.CaseReturn(f => f <= 4, 255)
.CaseReturn(f => f <= 6, 192)
.CaseReturn(7, 128)
.CaseReturn(8, 64)
.DefaultReturn(0)
.ReturnValue;
return Color.FromArgb(255, 255 - r, 255 - r);
}
虽然不传入操作结果处理表达式就能安享编译器的自动推导功能,但是有时操作结果表达式还是十分有用的,比如原文中的这个范例:
这里首先让所有筛选过程都禁用了break,然后通过传入的表达式将依次返回的结果相累加。
对于这种应用来说,就必须传入自定义的表达式来对结果进行处理了,也就必须要显式声明类型了,我对此的实现也与之相仿,但是我要求传入的表达式具有两个参数,第一个参数是新获得的返回结果,第二个参数是目前的返回结果,并要求该表达式返回经过处理后的结果,以代入下一次处理或用作最终结果,等效代码为:
更多精彩
赞助商链接