我最近接受了一个项目作为个人爱好,以提高我的代码质量。我已经制作了这种方法,但我觉得我肯定不会以某种方式使用它,我觉得这是一种非常简单的方法,而不必像这样经过一个大的开关吗?
我知道0-9可能只是.ToString()
' d然后解析为int并返回,但我不确定如何合并这个想法,同时还要考虑其余的开关例。
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)");
}
}
答案 0 :(得分:9)
你可以这样做
var value = "0123456789abcdefghijklmnopqrstuvwxyz".IndexOf(input);
if (value == -1)
throw new FormatException("The input was not in a correct format: input must be between (0-k)");
return value;
答案 1 :(得分:2)
信件:
您可以使用ascii代码
让我们以a
为例,根据this table a
的十六进制代码为61
,每个字母的增量(b
为62且等等)。您需要10
,因此您需要从每个此类代码中减去51
。
您还可以使用该表中字符的十进制表示。 This answer告诉您如何获取char的十进制表示
数字
直接返回。
我只是建议我会使用的算法。 我想你可以自己实现这个代码
答案 2 :(得分:1)
试试这段代码,
public static short ParseHeight(char input)
{
var res = input - 0;
if (res <= 57)
return (short)(res - 48);
else if (res >= 97)
return (short)(res - 87);
else
{
throw new FormatException("The input was not in a correct format: input must be between (0-k)");
}
}