我在我正在处理的代码库中遇到了一个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