如何将字符串转换为char[]再转换为long[]?代码输出异常问题求助(附LINQ实现需求)
问题分析与解决
首先,你看到输出System.Int64[]的原因很简单:当你直接用Console.WriteLine输出数组对象时,C#默认会调用数组的ToString()方法,而这个方法的默认返回值就是数组的类型名称,不会遍历输出元素。你的Digitize方法本身的转换逻辑是完全正确的,问题出在输出方式上。
修复输出问题
只需要修改Main方法里的输出代码,用string.Join把数组元素拼接成可读的字符串再输出:
static void Main(string[] args) { // 用逗号分隔元素,输出成类似 "1, 2, 3, 4, 5, 6, 7" 的格式 Console.WriteLine(string.Join(", ", Digitize(1234567))); }
这样运行后就能看到正确的数字数组元素了。
用LINQ简化转换逻辑
如果想用LINQ实现更简洁的转换,可以把整个Digitize方法简化成一行代码,这里有两种常见写法:
写法1:基于字符串解析(和你原来的逻辑一致,更直观)
public static long[] Digitize(long n) { return n.ToString() .Select(c => long.Parse(c.ToString())) .ToArray(); }
写法2:基于字符ASCII值计算(更高效,避免字符串解析开销)
因为字符'0'到'9'的ASCII值是连续的,所以可以用c - '0'直接得到对应的数字,再转成long类型:
public static long[] Digitize(long n) { return n.ToString() .Select(c => (long)(c - '0')) .ToArray(); }
两种写法都能得到相同的结果,第二种性能更好,适合处理大量数据的场景。
内容的提问来源于stack exchange,提问作者user18084277
相关产品推荐
相关产品推荐

