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数组转换为枚举数组?
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 输入按键事件处理程序 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01