How to use IEnumerable.Castlt;gt; and .ToArray() to convert int array to an enum array?(如何使用IEnumerable.Castlt;gt;和.ToArray()将int数组转换为枚举数组?)
问题描述
考虑以下枚举声明和int数组:
要将此int[]
数组转换为Test[]
数组,只需执行以下操作:
我最初尝试这样做:
但是,这会在运行时引发异常:
System.ArrayTypeMismatchException:无法将源数组类型分配给目标数组类型。
第一个问题
有没有办法使用Linq和Cast<>
执行此操作而不出错,或者我必须只使用Array.Convert()
?
问题2(在第一个问题回答正确后添加)
它到底为什么不起作用?
它看起来像是一个实现细节逃逸的案例...请考虑:
这会导致错误:
但这不是:
这也不是:
明显的含义是,在.ToList()
实现中正在进行某种优化,从而导致此异常。
附录:
这也行得通:
或
仅当原始数据是数组时,它才不起作用。
推荐答案
您可以使用.Select(e => (Test)e)
。
这篇关于如何使用IEnumerable.Cast<;>;和.ToArray()将int数组转换为枚举数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!