我有一个枚举,它有4个值:
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[]类型。
发布于 2013-03-02 07:52:06
如果数组确实是一个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[]时,这就不起作用了。
发布于 2013-03-02 07:51:38
这不可能。无法在引用类型数组和值类型数组之间进行强制转换。您需要手动将元素复制到新数组中
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;
}发布于 2017-12-13 03:40:52
使用linq进行...or,特别是如果您需要对一行中的每个元素执行一些额外的操作:
DriveRates[] enumArray = originalArray.Select(o => (DriveRates)o).ToArray();https://stackoverflow.com/questions/15168855
复制相似问题