程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#擴展方法switch/case組擴展

c#擴展方法switch/case組擴展

編輯:C#入門知識

變態篇二中給出了對if/else、swith/case及while 的擴展,大家評價各不相同,其實本人也感覺有點牽強。其中舉了一個Swith擴展的應用,今天突然有了新想法,對它改進了一些。所謂“語不驚人死不休”,且看這次的改進如何。
  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    }

 

這段代碼定義了三個擴展Switch、Case和Default。
首先看這些擴展的一個最簡單的應用,如下:
 

1     string typeName = string.Empty;
2     typeId.Switch((string s) => typeName = s)
3        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved