0

将枚举从 int 继承的枚举列表转换或复制到整数数组的最佳解决方案是什么?

4

3 回答 3

6

由于您没有指定您使用的语言,我猜您使用的是 C#。我还假设您在谈论枚举而不是枚举:

var array = enums.Select(e => (int)e).ToArray();
于 2013-01-09T18:46:16.217 回答
3

通常不可能将 an “转换”List<anything>为数组。可以生成一个新数组,其内容使用基于列表内容的值进行初始化。这与例如将 a 转换List<T>为 a不同ReadOnlyCollection<T>,后者会产生原始数据的只读“实时”视图。这种区别很重要,因为在后一种情况下,结果数组将保持“附加”到提供初始化数据的对象,而在前一种情况下,它将被分离。

可以使用该方法将数据从枚举类型的数组复制到底层整数类型的数组Array.Copy。您最好的选择可能是使用ToArray将 转换List<someEnum>为 a someEnum[],然后使用Array.Copy将数据从其中复制到int[]( 或long[],或任何合适的类型)。虽然这需要复制数组两次,但通常批量复制数组元素所需的时间将远少于单独处理元素的时间。

于 2013-01-09T19:03:14.593 回答
1

最好的方法是自己运行一个for循环。

static int[] Array(List<MyEnum> list)
{
    var array = new int[list.Count];
    for (int i = 0; i < array.Length; i++)
        array[i] = (int)list[i];

    return array;
}

您可以Cast<T>使用System.Linq. 它会导致拳击并且不会是最高效的。

var array = list.Cast<int>().ToArray();

Justin's 是考虑到可读性/速度权衡的最佳解决方案。

于 2013-11-30T06:36:40.293 回答