简化方法?

问题描述 投票:0回答:3

我最近接受了一个项目作为个人爱好,以提高我的代码质量。我已经制作了这个方法,但我觉得我肯定是以某种方式工作了,我觉得有一种非常简单的方法可以做到这一点,而不必像这样经过一个大的开关?

我知道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)");
    }
}
c# .net switch-statement
3个回答
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;

2
投票

对于信件:

你可以使用ascii代码

让我们以字母a为例,根据this tablea的十六进制代码是61,并且每个字母的增量(b是62,依此类推)。你想要10,所以你需要从每个这样的代码中减去51

您还可以使用该表中字符的十进制表示。 This answer告诉您如何获取char的十进制表示

对于数字

直接回来。


我只是建议我会使用的算法。我想你可以自己实现这个代码


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)");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.