【发布时间】:2012-09-18 09:16:01
【问题描述】:
我有这个代码:
switch (currentLetter)
{
case 'A': return 'B';
case 'B': return 'C';
case 'C': return 'D';
case 'D': return 'E';
case 'E': return 'F';
case 'F': return 'G';
case 'G': return 'H';
case 'a': return 'b';
case 'b': return 'c';
case 'c': return 'd';
case 'd': return 'e';
case 'e': return 'f';
case 'f': return 'g';
case 'g': return 'h';
}
我想了很多方法来改变它,但我不确定该选择哪一个。我可以用(char)(currentLetter + 1) 替换所有返回值,使用带有ASCII 值的if 语句来确定范围,然后执行(char)(currentLetter + 1),使用Enumerable.Range.Contains,然后查看值是否在范围内,用if 替换开关等.
此代码不会在其他任何地方重复,我不确定这是否不是最好的方法,因为代码的读者很清楚发生了什么,他们不必思考字符代码、算术等。此外,不会有更多字符添加到 case 语句中,因此不会变得笨拙。
不确定我应该保持原样还是更改它。
【问题讨论】:
-
有点冗长,但很清楚。如果它只在一个地方使用,我会保持原样。您可能会花费更多的时间来减少 LOC(并且可能会降低可维护性/可读性),而不是节省 LOC 的价值。
标签: c# refactoring character switch-statement