c#扩展方法奇思妙用变态篇三:switch/case组扩展
2010-09-30 20:46:08 来源:WEB开发网代码行数比较一下吧,前面的是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 }
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接