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

为何C#中List<int>会将数字字符转为对应ASCII值?

问题原因&解决办法

嘿,你踩了一个字符转数字的常见小陷阱啦!

为啥数字会变成50、53?

当你用Convert.ToInt32(holder[i])的时候,holder[i]是个char类型的字符(比如输入25的话,就是'2'和'5'),这时候Convert.ToInt32返回的不是数字本身,而是这个字符对应的ASCII码值。你看:

  • '0'的ASCII码是48,'1'是49,那'2'自然就是50,'5'就是53啦,完全对应你看到的输出结果。

怎么解决?

给你几个简单好用的方法,随便挑一个都行:

方法1:利用ASCII码的连续性(最推荐)

数字字符的ASCII码是连续排列的,所以直接用当前字符减去'0'的ASCII码,就能得到对应的整数:

numbers.Add(holder[i] - '0');

这个方法效率高,代码也简洁。

方法2:用专门的字符数值转换方法

char.GetNumericValue就是干这个活的,不过它返回的是double,需要转成int:

numbers.Add((int)char.GetNumericValue(holder[i]));

方法3:先转字符串再转整数

把单个字符转成字符串,再用int.Parse或者Convert.ToInt32转换:

numbers.Add(int.Parse(holder[i].ToString()));

修正后的完整代码

顺便提一句,你原方法声明了返回int,但代码里没写返回语句,编译会报错,我给你补上了乘积的返回逻辑(毕竟你说要后续相乘):

public static int METHOD(long n) //25 
{ 
    String holder = n.ToString(); 
    List<int> numbers = new List<int>(); 
    for (int i = 0; i <= holder.Length - 1; i++) 
    { 
        // 这里用方法1修正
        numbers.Add(holder[i] - '0'); 
    } 
    for (int i = 0; i <= numbers.Count - 1; i++) 
    { 
        Console.WriteLine("List Position " + i + " is: " + numbers[i]); 
    }
    // 返回所有数字的乘积,符合你后续相乘的需求
    return numbers.Aggregate(1, (current, next) => current * next); 
}

内容的提问来源于stack exchange,提问作者Ben Beart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:18:10