请教Array.ConvertAll中x=>(int)x-48的代码逻辑含义
拆解这段数字转int数组的代码
咱们一步步拆你贴的这段代码,重点说你疑惑的部分:
int[] fNum = Array.ConvertAll(num.ToString().ToArray(), x => (int)x - 48);
1. 变量x的作用
Array.ConvertAll是个通用转换方法,它的第二个参数是转换规则——你得告诉它:“拿到原数组里的每个元素后,怎么把它变成目标类型的元素”。
这里的x就是原数组(也就是num.ToString().ToArray()生成的char数组)里的单个元素。比如你输入的num是123,原数组就是['1', '2', '3'],那x就会依次取到'1'、'2'、'3'这三个字符。
2. x => (int)x - 48的逻辑
这部分是把字符形式的数字转成真正的int数字,核心是利用ASCII码的规律:
- 字符'0'的ASCII码值是48,'1'是49,'2'是50……一直到'9'是57。
(int)x是把char类型的数字字符强制转换成对应的ASCII码整数。比如(int)'1'会得到49。- 减去48之后,正好把ASCII码值映射成对应的数字:49-48=1,50-48=2,以此类推,就能把字符'1'变成int类型的1。
举个实际例子:
如果num是456,这段代码的执行流程是:
num.ToString()得到字符串"456".ToArray()拆成char数组:['4', '5', '6']Array.ConvertAll遍历每个char:- x='4' → (int)x=52 → 52-48=4
- x='5' → (int)x=53 → 53-48=5
- x='6' → (int)x=54 → 54-48=6
- 最终得到int数组
[4,5,6]
额外补充:更直观的写法
其实可以用更易读的方式实现同样效果,比如用char.GetNumericValue方法:
int[] fNum = Array.ConvertAll(num.ToString().ToArray(), x => (int)char.GetNumericValue(x));
原理和减48完全一致,只是这个方法帮你封装了ASCII码的计算逻辑,可读性更强。
内容的提问来源于stack exchange,提问作者Vasant Raval
相关产品推荐
相关产品推荐

