如何使用IEnumerable.Cast <>和.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()

问题二(在正确回答第一个问题后添加)

究竟为什么不起作用?

似乎是实现细节转义的情况...考虑:

这会导致错误:

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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将字符串转换为数组(int和字符串数组)?

如何将“枚举”转换为数组

使用int和None将字符串转换为数组

如何使用 SQLite 和 cast as int 更新查询

使用CAST和bigint

如何将JSON数组转换为列和行

如何将 X 项转换为数组和循环

如何将枚举数组转换为整数数组

如何将整数数组转换为枚举数组?

使用键和值将数组转换为JSON

如果未指定方法toArray,如何使用toArray()将哈希集转换为数组?

如何使用sql cast运算符将包含日期和时间的字符串列转换为日期?

如何将数组数组转换为包含键和值的分组数组?

如何将数组值0和255转换为对应的0和1数组

如何将数组转换为数组中的对象-Angular和Javascript

如何将JSON转换为键数组和值数组?

使用键和值将字符串数组转换为数组对象

如何使用Carrierwave和MiniMagick(Ruby on Rails)将PDF转换为图像数组

如何使用python将.mp3文件转换为频率和振幅的数组?

如何使用PHP和Mysql将数组从表单转换为数据库

如何将String数组转换为Int数组?

如何将int数组转换为char数组

使用Java 8将int数组转换为long数组?

使用atoi将char数组转换为int数组

使用Golang将int数组转换为char数组?

ELI5:如何将IEnumerable转换为列表或数组,以避免IEnumerable多个枚举的性能损失?

如何使用array_map和intval将数字以10为底的数组转换为以16为底的数组?

在扩展方法中使用数组和IEnumerable

如何使用动态数据将 IEnumerable 转换为 IEnumerable<T>