例子如下:
1
using System;
2
3
enum Tenders : int
4

{
5
Cash = 1,
6
Visa,
7
MasterCard,
8
AmericanExpress
9
};
10
11
class Payment
12

{
13
public Payment(Tenders tender)
14
{
15
this.Tender = tender;
16
}
17
18
protected Tenders tender;
19
public Tenders Tender
20
{
21
get
22
{
23
return this.tender;
24
}
25
set
26
{
27
this.tender = value;
28
}
29
}
30
31
public void ProcessPayment()
32
{
33
switch((int)(this.tender))
34
{
35
case (int)Tenders.Cash:
36
Console.WriteLine("\nCash - Always good");
37
break;
38
39
case (int)Tenders.Visa:
40
case (int)Tenders.MasterCard:
41
case (int)Tenders.AmericanExpress:
42
Console.WriteLine("\nDisplay Credit card Authorization Dialog.");
43
break;
44
45
default:
46
Console.WriteLine("\nSorry - Invalid tender");
47
break;
48
}
49
}
50
}
51
52
class Switch
53

{
54
public static void DisPlayMenu()
55
{
56
Console.WriteLine("Which form of payment is" + "Being Used:");
57
Console.WriteLine("\t1 = Cash");
58
Console.WriteLine("\t2 = Visa");
59
Console.WriteLine("\t3 = Master Card");
60
Console.WriteLine("\t4 = American Express");
61
Console.WriteLine("===>");
62
}
63
64
public static int GetTender()
65
{
66
int tenderChoice = -1;
67
DisPlayMenu();
68
69
bool validTender = false;
70
while(!validTender)
71
{
72
string str = Console.ReadLine();
73
tenderChoice = Convert.ToInt32(str);
74
75
if(tenderChoice >= 0 && tenderChoice <=4)
76
validTender = true;
77
else
78
Console.WriteLine("Ivalid choice - try again");
79
}
80
81
return tenderChoice;
82
}
83
84
public static void Main()
85
{
86
Tenders tenderChoice = (Tenders)GetTender();
87
Payment payment = new Payment(tenderChoice);
88
payment.ProcessPayment();
89
90
Console.ReadLine();
91
}
92
}

2

3

4



5

6

7

8

9

10

11

12



13

14



15

16

17

18

19

20



21

22



23

24

25

26



27

28

29

30

31

32



33

34



35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53



54

55



56

57

58

59

60

61

62

63

64

65



66

67

68

69

70

71



72

73

74

75

76

77

78

79

80

81

82

83

84

85



86

87

88

89

90

91

92

虽然可以组合case标签,但是不能穿透switch语句。
比如39-43行改成:














编译时就会报错。
但是我确实想让它实现贯穿的效果呢?当然还是有其他弯路可以走的:
第一种方法就是使用if语句替代:









(当然,这个例子的语义本来就不适合贯穿,仅作演示)
第二种方法是使用我们一直避讳使用的goto语句:















参考资料:《C#技术揭秘》