作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个有 4 个值的枚举:
public enum DriveRates
{
driveSidereal = 0,
driveLunar = 1,
driveSolar = 2,
driveKing = 3
}
我有一组值,我想将它们转换为一组 DriveRates。但是,当我执行 var rates = (DriveRates[])ret;
时,ret
是一个数字对象数组(可能是整数),它说 Unable to cast “System.Object[]”类型的对象键入“ASCOM.DeviceInterface.DriveRates[]”。
ret
={0,1,2,3}
。我应该怎么做呢?同样,我正在尝试将一个枚举值数组转换为一个枚举数组...嗯,值 :) 但我正在尝试从类型 object[]
转换为类型 DriveRates []
.
最佳答案
如果它真的是一个 object[]
,您不能只转换数组。不过,您可以非常轻松地创建一个新数组:
var enumArray = originalArray.Cast<DriveRates>().ToArray();
如果它实际上是一个 int[]
数组开始,您可以强制转换 - 虽然您必须先与 C# 编译器很好地交谈:
using System;
class Program
{
enum Foo
{
Bar = 1,
Baz = 2
}
static void Main()
{
int[] ints = new int[] { 1, 2 };
Foo[] foos = (Foo[]) (object) ints;
foreach (var foo in foos)
{
Console.WriteLine(foo);
}
}
}
C# 编译器不相信存在从 int[]
到 Foo[]
的转换(并且在 C# 规则中不存在)。 ..但是 CLR 可以处理这种转换,所以只要您可以说服 C# 编译器一起玩(首先转换为 object
)就可以了。
当原始数组实际上是一个 object[]
时,这不起作用。
关于c# - 将整数数组转换为枚举数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168855/
我是一名优秀的程序员,十分优秀!