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

为何char[]调用Cast<int>会抛出强制转换异常?附解决方案

为什么Cast<int>()在字符串上会触发无效强制转换异常?

这问题我之前也踩过坑,咱们来一步步捋清楚原因:

为什么前两种写法会报错?

先搞明白Cast<T>()的本质:它是为非泛型集合设计的工具方法,核心作用是把集合里的元素「当作」T类型来处理——注意,它只负责拆箱操作(比如把装箱成object的int拆回int),或者处理引用类型的向上/向下转型,完全不支持不同值类型之间的显式转换。

  • 第一种写法text.Cast<int>().ToArray():字符串text实现了IEnumerable<char>,Cast<int>()会尝试把每个char实例直接「当作」int来拆箱,但char本身是值类型,并没有被装箱成object,而且char和int是完全不同的值类型,这种跨类型的强制转换是Cast<T>处理不了的,所以直接抛出InvalidCastException。
  • 第二种写法text.ToCharArray().Cast<int>().ToArray():哪怕转成了char[],它依然是IEnumerable<char>,Cast<int>()的逻辑和上面完全一致,还是试图把char直接转成int,自然也会触发同样的异常。

最简可行方案

你最后用的Select(c=>(int)c).ToArray()就是最优解!因为Select里的lambda表达式是显式执行C#原生支持的值类型转换——char可以通过显式转换直接得到对应的ASCII/Unicode码值(也就是int类型),所以这段代码能正常运行。

如果要写得更紧凑一点,也可以保持你现在的写法:

var c3 = text.Select(c => (int)c).ToArray();

内容的提问来源于stack exchange,提问作者david.pfx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:37:27