分配枚举值的问题

时间:2014-06-30 14:02:01

标签: c# .net enums enumeration

我有一个枚举 -

public enum EnumA
{
   All, A, B, C, D, E, F
}

我将这个枚举用于另一个类

public class ClassB
{
     public string[] createdOn { get; set; }
     public EnumA[] EnumA { get; set; }
}

我在其他方法中使用此ClassB -

public void MethodC(ClassB classB, int userId)
{
         // Now I need to check if classB.EnumA’s Count() is zero or not. If zero then I need to assign classB.ClassA[] with A, B, C, D, E, F

        // For that I have tried this –

    int index = 0;
    foreach(ClassA enumA in (ClassA[])Enum.GetValues(typeof(EnumA)))
    {
        classB. EnumA[index++] = enumA;
    }
}

这会引发‘Index out of the bounds error’

我出错的任何帮助?

编辑 - 我: ClassA已更改为EnumA

2 个答案:

答案 0 :(得分:2)

问题是您必须在方法中从EnumA实例化ClassB属性:

EnumA[] values = (EnumA[])Enum.GetValues(typeof(EnumA));

classB.EnumA = new EnumA[values.Length];
int index = 0;
foreach (EnumA enumA in values)
{
    classB.EnumA[index++] = enumA;
}

但实际上,正如Trevor建议的那样,你的问题有一个更简单的解决方案:只需直接分配:

classB.EnumA = (EnumA[])Enum.GetValues(typeof(EnumA));

答案 1 :(得分:1)

数组是不可变的结构。如果数组已经分配,​​则无法更改数组的大小。而不是你必须创建新大小的新数组。

看看这段代码:

public void MethodC(ClassB classB, int userId)
{
    int index = 0;
    classB.ClassA = new ClassA[(ClassA[])Enum.GetValues(typeof(ClassA)).Length];
    foreach(ClassA classA in (ClassA[])Enum.GetValues(typeof(ClassA)))
    {
        classB. ClassA [index++] = classA;
    }
}