WEB开发网
开发学院软件开发C语言 c#扩展方法奇思妙用变态篇三:switch/case组扩展 阅读

c#扩展方法奇思妙用变态篇三:switch/case组扩展

 2010-09-30 20:46:08 来源:WEB开发网   
核心提示: 代码行数比较一下吧,前面的是7行,c#扩展方法奇思妙用变态篇三:switch/case组扩展(3),这儿是19行,再来看一个复杂点的应用,也可以判断范围,仔细看这段代码,用户注册时经常要检验用户密码的强度,通常用不同颜色展示给用户

代码行数比较一下吧,前面的是7行,这儿是19行。

再来看一个复杂点的应用,用户注册时经常要检验用户密码的强度,通常用不同颜色展示给用户,让用户有个直观的了解。

这里我们简化一下,仅判断密码的长度,越长认为安全性越好。用红的背景色展示给用户,密码越不安全越红,反之则红色变淡。

通俗点,密码长红色淡,密码短红色深。

下面根据密码长度获取背景颜色:

 1     private static Color GetBackColor(string password)
 2     {
 3         Color backColor = default(Color);
 4         password.Switch(p => p.Length, (Color c) => backColor = c)
 5             .Case(l => l <= 4, Color.FromArgb(255, 0, 0))
 6             .Case(l => l <= 6, Color.FromArgb(255, 63, 63))
 7             .Case(7, Color.FromArgb(255, 127, 127))
 8             .Case(8, Color.FromArgb(255, 191, 191))
 9             .Default(Color.FromArgb(255, 255, 255));
10         return backColor;
11     }

先看Switch的这里有两个参数,在第一个位置插入了一个参数,它取了密码的长度来进行比较。

同理第4行的lambda将,Case返回的颜色赋给backColor。

第5、6行Case中第一个参数是一个lambda,Case扩展即可以与一个实际值比较相等,也可以判断范围。

仔细看这段代码,Color.FromArgbp被调用了很多次,我们来重构一下:

 1     private static Color GetBackColor2(string password)
 2     {
 3         Color backColor = default(Color);
 4         password.Switch(p => p.Length, (int red) => backColor = Color.FromArgb(255, 256 - red, 256 - red))
 5             .Case(l => l <= 4, 256)
 6             .Case(l => l <= 6, 192)
 7             .Case(7, 128)
 8             .Case(8, 64)
 9             .Default(0);
10         return backColor;
11     }

上一页  1 2 3 4 5 6  下一页

Tags:扩展 方法 奇思

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