首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将整数数组转换为枚举数组

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

Stack Overflow用户
提问于 2013-03-02 07:49:29
回答 3查看 6.3K关注 0票数 7

我有一个枚举,它有4个值:

代码语言:javascript
复制
public enum DriveRates 
{ 
    driveSidereal = 0,
    driveLunar = 1, 
    driveSolar = 2, 
    driveKing = 3 
} 

我有一个要转换为DriveRates数组的值数组。但是,当我使用ret作为数字(可能是整数)的对象数组执行var rates = (DriveRates[])ret;时,它显示为Unable to cast object of type 'System.Object[]' to type 'ASCOM.DeviceInterface.DriveRates[]'.

ret={0,1,2,3}。我该怎么做呢?同样,我试图将枚举值的数组转换为值的数组,enum...well :),但我试图将object[]类型转换为DriveRates[]类型。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-02 07:52:06

如果数组确实是一个object[],那么您不能只是强制转换数组。不过,您可以很容易地创建一个新数组:

代码语言:javascript
复制
var enumArray = originalArray.Cast<DriveRates>().ToArray();

如果一开始它实际上是一个int[]数组,那么您可以强制转换-尽管您必须首先与C#编译器进行良好的交谈:

代码语言:javascript
复制
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[]时,这就不起作用了。

票数 21
EN

Stack Overflow用户

发布于 2013-03-02 07:51:38

这不可能。无法在引用类型数组和值类型数组之间进行强制转换。您需要手动将元素复制到新数组中

代码语言:javascript
复制
DriveRates[] Convert(object[] source) { 
  var dest = new DriveRates[source.Length];
  for (int i = 0; i < source.Length; i++) { 
    dest[i] = (DriveRates)source[i];
  }
  return dest;
}
票数 1
EN

Stack Overflow用户

发布于 2017-12-13 03:40:52

使用linq进行...or,特别是如果您需要对一行中的每个元素执行一些额外的操作:

代码语言:javascript
复制
DriveRates[] enumArray = originalArray.Select(o => (DriveRates)o).ToArray();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15168855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档