我在c#中有一个char:
char foo = '2';
现在我想把2变成一个整型。我发现皈依。ToInt32返回该字符的实际十进制值,而不是数字2。以下是可行的方法:
int bar = Convert.ToInt32(new string(foo, 1));
int。解析也只适用于字符串。
c#中没有本地函数可以在不使其成为字符串的情况下从char转换为int吗?我知道这是微不足道的,但这似乎很奇怪,没有本地直接进行转换。
我在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);
其他回答
我见过很多答案,但我觉得很困惑。我们不能简单地使用类型转换吗?
例:-
int s;
char i= '2';
s = (int) i;
这将转换为整数并处理unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
你可以在这里阅读更多。
我搜索了最优化的方法,并非常惊讶地发现,最好的方法是最简单的(也是最流行的答案):
public static int ToIntT(this char c) =>
c is >= '0' and <= '9'?
c-'0' : -1;
下面是我尝试过的一些方法:
c-'0' //current
switch //about 25% slower, no method with disabled isnum check (it is but performance is same as with enabled)
0b0000_1111 & (byte) c; //same speed
Uri.FromHex(c) /*2 times slower; about 20% slower if use my isnum check*/ (c is >= '0' and <= '9') /*instead of*/ Uri.IsHexDigit(testChar)
(int)char.GetNumericValue(c); // about 20% slower. I expected it will be much more slower.
Convert.ToInt32(new string(c, 1)) //3-4 times slower
请注意,isnum检查(第一个代码块中的第二行)占用了大约30%的性能,所以如果您确定c是char,则应该取消它。测试误差为~5%
我更喜欢切换方法。 性能与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 theNameOfYourInt = (int).Char.GetNumericValue(theNameOfYourChar);
" namameofyourint " -你想要你的char被转换成的int。
" namameofyourchar " -你想要使用的Char,因此它将被转换为int型。
其他的都不要管。