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数组转换为枚举数组?
基础教程推荐
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- WPF 模态进度窗口 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
