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

Arl*_*ler 7 c# .net-4.0

我有一个有4个值的枚举:

public enum DriveRates 
{ 
    driveSidereal = 0,
    driveLunar = 1, 
    driveSolar = 2, 
    driveKing = 3 
} 
Run Code Online (Sandbox Code Playgroud)

我有一个值数组,我想要转换为DriveRates数组.然而,当我这样做时var rates = (DriveRates[])ret;,它ret是一个数字对象数组(可能是整数),它说Unable to cast object of type 'System.Object[]' to type 'ASCOM.DeviceInterface.DriveRates[]'.

ret= {0,1,2,3}.我应该怎么做呢.再次,我试图将枚举值数组转换为枚举数组......好吧,值:)但我正在尝试从类型转换object[]为类型DriveRates[].

Jon*_*eet 21

你不能只是投射阵列,如果它真的是object[].您可以非常轻松地创建新数组:

var enumArray = originalArray.Cast<DriveRates>().ToArray();
Run Code Online (Sandbox Code Playgroud)

如果它实际上是一个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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

C#编译器不相信转换int[]Foo[](并且没有,在C#的规则内)......但是CLR对于这种转换很好,所以只要你能说服C#编译器来玩沿着(通过铸造到object第一个)它很好.

当原始数组真的是一个时,这不起作用object[].