我有一个有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[].
| 归档时间: |
|
| 查看次数: |
4557 次 |
| 最近记录: |