我在我正在處理的代碼庫中遇到了一個switch語句,我試圖弄清楚如何從switch statements are considered a code smell更好地替換它。然而,通過several在flipoverflow上關於replacingswitchstatements的帖子我似乎無法想到一個有效的方式來取代這個特定的開關語句。什麼時候應該嘗試消除switch語句?
它讓我想知道這個特定的switch語句是否正常,以及是否存在switch語句被認爲合適的特定情況。
在我的情況下我與掙扎的代碼(自然略有混淆)是這樣的:
private MyType DoSomething(IDataRecord reader)
{
var p = new MyType
{
Id = (int)reader[idIndex],
Name = (string)reader[nameIndex]
}
switch ((string) reader[discountTypeIndex])
{
case "A":
p.DiscountType = DiscountType.Discountable;
break;
case "B":
p.DiscountType = DiscountType.Loss;
break;
case "O":
p.DiscountType = DiscountType.Other;
break;
}
return p;
}
任何人都可以提出一個方法來消除這種開關?或者這是一個適當的使用開關?如果是的話,switch語句還有其他適當的用法嗎?我真的很想知道它們在哪裏是合適的,所以我不會浪費太多時間來試圖消除我遇到的每個開關語句,只是因爲在某些情況下它們被認爲是嗅覺。
更新:在的Michael建議我做了一些搜索出該邏輯重複的,發現有人在另一個類中,有效地使整個switch語句創建冗餘的邏輯。所以在這段代碼中,switch語句是不必要的。然而,我的問題更多的是關於switch語句在代碼中的適用性,以及我們是否應該總是試圖在發現它們時進行替換,因此在這種情況下,我傾向於接受這個switch語句合適的答案。
你可以添加一個標籤來包含寫入的編程語言嗎?很明顯代碼在做什麼,但我認爲這有助於區分。這顯然不是Java,因爲Java中沒有「字符串」類。 – 2009-07-01 23:50:44
@Amir我在代碼中將代碼標識爲c#。我沒有擺在首位的原因是因爲我並不想特別針對c#提出問題,因爲我的問題更多地是關於使用switch語句的一般合適性...... – mezoid 2009-07-01 23:54:39
我想冒險猜測C# – bbqchickenrobot 2009-07-01 23:55:05