c# - 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'类型。'”
您可能认为这是this或this的副本,但这些与将对象拆箱到非原始类型的类型有关。在这种情况下,我有一个IEnumerable<int>
. 为什么我不能将这个元素逐个元素转换为IEnumerable<char>
?它们都是原始类型,而不是对象。
解决方案
的文档Enumerable.Cast<TResult>
说明以下内容:
此方法执行的唯一类型转换是引用转换和拆箱转换。集合中元素的运行时类型必须与目标类型匹配,或者在值类型的情况下,元素的运行时类型必须是目标类型的装箱转换的结果。不允许其他类型的转换,例如不同数字类型之间的转换。
所以看起来,即使它被命名Cast
,它实际上并不支持将值转换为不同的类型。