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


基础教程推荐
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30