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数组转换为枚举数组?
基础教程推荐
- 全局 ASAX - 获取服务器名称 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
