我在c#中有一个char:

char foo = '2';

现在我想把2变成一个整型。我发现皈依。ToInt32返回该字符的实际十进制值,而不是数字2。以下是可行的方法:

int bar = Convert.ToInt32(new string(foo, 1));

int。解析也只适用于字符串。

c#中没有本地函数可以在不使其成为字符串的情况下从char转换为int吗?我知道这是微不足道的,但这似乎很奇怪,没有本地直接进行转换。


当前回答

这招对我很管用:

int bar = int.Parse("" + foo);

其他回答

char c = '1';
int i = (int)(c - '0');

你可以用它创建一个静态方法:

static int ToInt(this char c)
{
    return (int)(c - '0');
}

这将把它转换为int型:

char foo = '2';
int bar = foo - '0';

这是可行的,因为每个字符在内部都由一个数字表示。字符“0”到“9”由连续的数字表示,因此找出字符“0”和“2”之间的差值,结果是数字2。

默认情况下使用UNICODE,所以我建议使用faulty的方法

int bar = int. parse (foo.ToString());

尽管下面的数值对于数字和基本拉丁字符是相同的。

我更喜欢切换方法。 性能与c - '0'相同,但我发现开关更容易阅读。

基准:

Method Mean Error StdDev Allocated Memory/Op
CharMinus0 90.24 us 7.1120 us 0.3898 us 39.18 KB
CharSwitch 90.54 us 0.9319 us 0.0511 us 39.18 KB

代码:

public static int CharSwitch(this char c, int defaultvalue = 0) {
    switch (c) {
        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;
        default: return defaultvalue;
    }
}
public static int CharMinus0(this char c, int defaultvalue = 0) {
    return c >= '0' && c <= '9' ? c - '0' : defaultvalue;
}

有人考虑过像这样使用int.Parse()和int.TryParse()吗

int bar = int.Parse(foo.ToString());

这样更好

int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
    //Do something to correct the problem
}

这样更安全,更不容易出错