我有一个枚举 -
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
答案 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;
}
}