【发布时间】:2018-06-12 21:15:46
【问题描述】:
我最近接手了一个项目作为个人爱好,以挑战提高我的代码质量。我做了这个方法,但我觉得我在某种程度上肯定已经过度工作了,我觉得有一种非常简单的方法可以做到这一点,而不必通过这样的大开关??
我知道 0-9 可能只是 .ToString()'d 然后解析为 int 并返回,但我不确定如何在考虑其余 switch 案例的同时合并该想法。
public static short ParseHeight(char input)
{
switch (input)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case 'a':
return 10;
case 'b':
return 11;
case 'c':
return 12;
case 'd':
return 13;
case 'e':
return 14;
case 'f':
return 15;
case 'g':
return 16;
case 'h':
return 17;
case 'i':
return 18;
case 'j':
return 19;
case 'k':
return 20;
case 'l':
return 21;
case 'm':
return 22;
case 'n':
return 23;
case 'o':
return 24;
case 'p':
return 25;
case 'q':
return 26;
case 'r':
return 27;
case 's':
return 28;
case 't':
return 29;
case 'u':
return 30;
case 'v':
return 31;
case 'w':
return 32;
default:
throw new FormatException("The input was not in a correct format: input must be between (0-k)");
}
}
【问题讨论】:
-
我投票结束这个问题,因为我相信它属于Code Review。
-
单行:返回 "0123456789abcdefghijklmnopqrstuvwxyz".IndexOf(character);
-
没有理由在
char上调用ToString()并解析结果,因为您可以从char值中减去0的基值。见标记重复。同样,可以通过减去适当的基值并添加适当的偏移量来处理所有其他字母范围(例如,(ch - 'a') + 10用于ch >= 'a' && ch <= 'z'的值) -
我确实觉得很有趣,抛出的异常会告诉调用者他们必须提供一个介于
0和k之间的值(没有具体说明其他字符是否像!,%、A等可能介于这些值之间的值是合法的),但该方法显然可以处理高达w的字母字符。 -
有些遗憾的是,人们这么快就将一个问题标记为重复,而实际上它并不是您链接到的问题的重复。
标签: c# .net switch-statement