首先是组合case标签。
例子如下:
case (int)Tenders.Cash:
Console.WriteLine("\nCash - Always good");
case (int)Tenders.Visa:
Console.WriteLine("Visa - Accepted");
case (int)Tenders.MasterCard:
Console.WriteLine("\nMasterCard - Accepted");
case (int)Tenders.AmericanExpress:
Console.WriteLine("\nAmerican Express - Accepted");
break;
![](/Images/OutliningIndicators/None.gif)
if(Tenders.Cash = Tenders.Visa)
{
Console.WriteLine("\nCash - Always good");
}
Console.WriteLine("Visa - Accepted");
Console.WriteLine("\nMasterCard - Accepted");
Console.WriteLine("\nAmerican Express - Accepted");
case (int)Tenders.Cash:
Console.WriteLine("\nCash - Always good");
goto case (int)Tenders.Visa;
case (int)Tenders.Visa:
Console.WriteLine("Visa - Accepted");
goto case (int)Tenders.MasterCard;
case (int)Tenders.MasterCard:
Console.WriteLine("\nMasterCard - Accepted");
goto case (int)Tenders.AmericanExpress;
case (int)Tenders.AmericanExpress:
Console.WriteLine("\nAmerican Express - Accepted");
break;
参考资料:《C#技术揭秘》
例子如下:
1
using System;
2![](/Images/OutliningIndicators/None.gif)
3
enum Tenders : int
4
{
5
Cash = 1,
6
Visa,
7
MasterCard,
8
AmericanExpress
9
};
10![](/Images/OutliningIndicators/None.gif)
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![](/Images/OutliningIndicators/None.gif)
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
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
51
![](/Images/OutliningIndicators/None.gif)
52
![](/Images/OutliningIndicators/None.gif)
53
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
92
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
虽然可以组合case标签,但是不能穿透switch语句。
比如39-43行改成:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
编译时就会报错。
但是我确实想让它实现贯穿的效果呢?当然还是有其他弯路可以走的:
第一种方法就是使用if语句替代:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
(当然,这个例子的语义本来就不适合贯穿,仅作演示)
第二种方法是使用我们一直避讳使用的goto语句:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
参考资料:《C#技术揭秘》