You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教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,这段代码的执行流程是:

  1. num.ToString()得到字符串"456"
  2. .ToArray()拆成char数组:['4', '5', '6']
  3. 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
  4. 最终得到int数组[4,5,6]

额外补充:更直观的写法

其实可以用更易读的方式实现同样效果,比如用char.GetNumericValue方法:

int[] fNum = Array.ConvertAll(num.ToString().ToArray(), x => (int)char.GetNumericValue(x));

原理和减48完全一致,只是这个方法帮你封装了ASCII码的计算逻辑,可读性更强。

内容的提问来源于stack exchange,提问作者Vasant Raval

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:25:28