switch 敘述維基百科將 switch 敘述描述為「一種選擇控制機制,用來讓變數或運算式的值改變程式的控制流程」。
這個機制涉及以下關鍵字:switch、case、break 和 default。
最簡單的形式是測試一個基本型別或字串運算式,並根據它的值做出決定。例如:
string direction = GetDirection();
switch (direction)
{
case "left":
GoLeft();
break;
case "right":
GoRight();
break;
default:
MarkTime();
break;
}
最複雜的形式則會用到向下轉型case <Type> <variable>:和防護條件(when)。
Animal animal = GetAnimal();
switch (animal)
{
case Dog canine:
case Coyote canine:
canine.Bark();
break;
case Cat cat when cat.HasOnly8Lives():
cat.IsCareful();
cat.Meow();
break;
case Cat cat:
cat.Meow();
break;
}
你正在開發一套系統,用來協助某個足球俱樂部網站的員工報導比賽。 這套系統能分析比賽中場內與場外的各種面向,並將它們轉換成事件串流。
這支球隊只踢 4-3-3 陣型,也從未認同 1965 年那項允許換人的規則變更,更別提擴編陣容了。
球員的描述如下:
1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"
請實作靜態的PlayAnalyzer.AnalyzeOnField()方法,根據球衣號碼輸出球員的描述。
PlayAnalyzer.AnalyzeOnField(10);
// => "striker"
請修改PlayAnalyzer.AnalyzeOnField()方法,讓它在處理 1 到 11 範圍之外的球衣號碼時回報UNKNOWN。
請實作PlayAnalyzer.AnalyzeOffField()方法,輸出球場周遭各種活動與人物的描述。
這個方法會接收不同型別的資料,這些資料需要被分析並轉換成適當的文字,以協助記者。
首先,我們會涵蓋關於球場的資料:
int)string)未知型別的資料不應該被處理,因此如果這個方法收到不同型別的資料,應該回傳空字串。
PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."
PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"
PlayAnalyzer.AnalyzeOffField(0.5);
// => ""
請修改PlayAnalyzer.AnalyzeOffField()方法,輸出比賽期間發生的事件的描述。
事件可以是Incident型別的任何子類別,並且會包含該事件的描述。
受傷是一種特別的事件,因為它會讓比賽暫停,所以應該以不同的方式處理。
PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."
PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."
請修改PlayAnalyzer.AnalyzeOffField()方法,在描述中提及比賽期間到場的俱樂部經理。
經理是Manager型別的實例,擁有自己的名字,以及他們所管理俱樂部的名稱。
經理的俱樂部可能是未知的,此時它會被設為null。
如果經理的俱樂部未知,它就不應該出現在描述中。
PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"
PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"