为何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
相关产品推荐
相关产品推荐

