C# 简化一种方法?

C# 简化一种方法?,c#,.net,switch-statement,C#,.net,Switch Statement,我最近接手了一个项目,作为个人爱好,参加了一项提高代码质量的挑战。我已经做了这个方法,但我觉得我在某种程度上肯定做得太多了,我觉得有一个非常简单的方法可以做到这一点,而不必运行像这样的大开关 我知道0-9可能只是.ToString()'d,然后解析为int并返回,但我不确定如何在考虑其他切换情况的同时合并该想法 public static short ParseHeight(char input) { switch (input) { case '0':

我最近接手了一个项目,作为个人爱好,参加了一项提高代码质量的挑战。我已经做了这个方法,但我觉得我在某种程度上肯定做得太多了,我觉得有一个非常简单的方法可以做到这一点,而不必运行像这样的大开关

我知道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)");
    }
}

对于字母:

你可以使用ascii码

以字母
a
为例,根据
a
的十六进制代码为
61
,每个字母的增量(
b
为62,依此类推)。您需要
10
,因此需要从每个这样的代码中减去
51

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

对于数字

直接返回


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

你可以这样做

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;
试试这个代码

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)");
    }
}
公共静态短解析高度(字符输入)
{
var res=输入-0;
如果(res=97)
返回(短)(res-87);
其他的
{
抛出新FormatException(“输入的格式不正确:输入必须介于(0-k)”之间);
}
}

我投票结束这个问题,因为我认为它属于主题。一行:return“0123456789abcdefghijklmnopqrstuvwxyz”。IndexOf(character);当您可以从
char
值中减去
0
的基值时,没有理由对
char
调用
ToString()
并解析结果。请参阅标记的副本。同样,所有其他字母范围都可以通过减去适当的基值并添加适当的偏移量来处理(例如,
(ch-'a')+10
,对于
ch>='a'&&ch的值,我发现抛出的异常会告诉调用方它们必须提供一个介于
0
k
(不具体说明那些值之间的其他字符,如
%
A
等是否合法),但该方法显然可以处理高达
w
的字母字符。令人遗憾的是,人们如此迅速地将一个问题标记为重复的问题,而实际上它并不是您链接到的问题的重复。这可能是最好的解决方案(至少在简单性方面)谢谢,这更简单,肯定有效:)