c#扩展方法奇思妙用变态篇三:switch/case组扩展
2010-09-30 20:46:08 来源:WEB开发网变态篇二中给出了对if/else、swith/case及while 的扩展,大家评价各不相同,其实本人也感觉有点牵强。其中举了一个Swith扩展的应用,今天突然有了新想法,对它改进了一些。所谓“语不惊人死不休”,且看这次的改进如何。
我先把扩展的源代码贴出来,折叠一下,等看完后面的例子和讲解再回来看。(和前面一样,本文侧重想法,代码演示用,如需使用,请自行完善)
SwithCaseExtension
1 public static class SwithCaseExtension
2 {
3 SwithCase#region SwithCase
4 public class SwithCase<TCase, TOther>
5 {
6 public SwithCase(TCase value, Action<TOther> action)
7 {
8 Value = value;
9 Action = action;
10 }
11 public TCase Value { get; private set; }
12 public Action<TOther> Action { get; private set; }
13 }
14 #endregion
15
16 Swith#region Swith
17 public static SwithCase<TCase, TOther> Switch<TCase, TOther>(this TCase t, Action<TOther> action) where TCase : IEquatable<TCase>
18 {
19 return new SwithCase<TCase, TOther>(t, action);
20 }
21
22 public static SwithCase<TCase, TOther> Switch<TInput, TCase, TOther>(this TInput t, Func<TInput, TCase> selector, Action<TOther> action) where TCase : IEquatable<TCase>
23 {
24 return new SwithCase<TCase, TOther>(selector(t), action);
25 }
26 #endregion
27
28 Case#region Case
29 public static SwithCase<TCase, TOther> Case<TCase, TOther>(this SwithCase<TCase, TOther> sc, TCase option, TOther other) where TCase : IEquatable<TCase>
30 {
31 return Case(sc, option, other, true);
32 }
33
34
35 public static SwithCase<TCase, TOther> Case<TCase, TOther>(this SwithCase<TCase, TOther> sc, TCase option, TOther other, bool bBreak) where TCase : IEquatable<TCase>
36 {
37 return Case(sc, c=>c.Equals(option), other, bBreak);
38 }
39
40
41 public static SwithCase<TCase, TOther> Case<TCase, TOther>(this SwithCase<TCase, TOther> sc, Predicate<TCase> predict, TOther other) where TCase : IEquatable<TCase>
42 {
43 return Case(sc, predict, other, true);
44 }
45
46 public static SwithCase<TCase, TOther> Case<TCase, TOther>(this SwithCase<TCase, TOther> sc, Predicate<TCase> predict, TOther other, bool bBreak) where TCase : IEquatable<TCase>
47 {
48 if (sc == null) return null;
49 if (predict(sc.Value))
50 {
51 sc.Action(other);
52 return bBreak ? null : sc;
53 }
54 else return sc;
55 }
56 #endregion
57
58 Default#region Default
59 public static void Default<TCase, TOther>(this SwithCase<TCase, TOther> sc, TOther other)
60 {
61 if (sc == null) return;
62 sc.Action(other);
63 }
64 #endregion
65 }
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接