首页 > 解决方案 > C#'无法将'System.Int32'类型的对象转换为'System.Char'类型。'

问题描述

以下代码创建字母表中所有字母的可迭代;

var alphabet = Enumerable.Range('a', 26).Select(c => (char)c);

哪个工作正常。但是,以下不起作用;

var alphabet = Enumerable.Range('a', 26).Cast<char>();

它抛出一个异常

“System.InvalidCastException:'无法将'System.Int32'类型的对象转换为'System.Char'类型。'”

您可能认为这是thisthis的副本,但这些与将对象拆箱到非原始类型的类型有关。在这种情况下,我有一个IEnumerable<int>. 为什么我不能将这个元素逐个元素转换为IEnumerable<char>?它们都是原始类型,而不是对象。

标签: c#casting

解决方案


的文档Enumerable.Cast<TResult>说明以下内容:

此方法执行的唯一类型转换是引用转换和拆箱转换。集合中元素的运行时类型必须与目标类型匹配,或者在值类型的情况下,元素的运行时类型必须是目标类型的装箱转换的结果。不允许其他类型的转换,例如不同数字类型之间的转换。

所以看起来,即使它被命名Cast,它实际上并不支持将值转换为不同的类型。


推荐阅读