如何在 for 循环中获取 Enum 的序数?
我尝试过这样的事情:
Enum test {A,B,C}
byte[] helper =new byte[3];
foreach (tests i in Enum.GetValues(typeof(test)))
{ helper[i] == test.i; }
但这不起作用...
在Java中,我知道你可以使用:
Enum test {A,B,C}
byte[] helper =new byte[3];
for (test i : test.values())
{ helper[i] == i.ordinal(); }
c#中有类似的东西吗? 或者有人有更好的主意来解决这个问题吗?
这里是代码的原始部分(Java):
public enum Facelet
{U1, U2, U3, U4, U5, U6, U7, U8, U9, R1, R2, R3, R4, R5, R6, R7, R8, R9, F1, F2, F3, F4, F5, F6, F7, F8, F9, D1, D2, D3, D4, D5, D6, D7, D8, D9, L1, L2, L3, L4, L5, L6, L7, L8, L9, B1, B2, B3, B4, B5, B6, B7, B8, B9}
enum color { U, R, F, D, L, B }
enum Corner{URF, UFL, ULB, UBR, DFR, DLF, DBL, DRB }
Byte ori;
final static Facelet[][] cornerFacelet = { { U9, R1, F3 }, { U7, F1, L3 }, { U1, L1, B3 }, { U3, B1, R3 },
{ D3, F9, R7 }, { D1, L9, F7 }, { D7, B9, L7 }, { D9, R9, B7 } };
public Color[] f = new Color[54];
这是 for 循环:
for (Corner i : Corner.values())
{
for (ori = 0; ori < 3; ori++)
if (f[cornerFacelet[i.ordinal()][ ori].ordinal()] == color.U || f[cornerFacelet[i.ordinal()][ori].ordinal()] == color.D)
break;}
最佳答案
您只需将枚举对象转换为 int
即可获取序数值。
所以:
int ordinalValue = (int) i;
编辑:在阅读了更新后的OP后,我认为这应该是朝着正确方向迈出的一步。唯一的问题是 color
和 Color
之间的类型不匹配,如评论部分所述。
class Program
{
public enum Facelet
{
/* values */
}
enum color
{
/* values */
}
enum Corner
{
/* values */
}
public static Color[] f = new Color[54];
private static Facelet[][] cornerFacelet =
{
new Facelet[] {Facelet.U9, Facelet.R1, Facelet.F3},
new Facelet[] {Facelet.U7, Facelet.F1, Facelet.L3},
new Facelet[] {Facelet.U1, Facelet.L1, Facelet.B3},
new Facelet[] {Facelet.U3, Facelet.B1, Facelet.R3},
new Facelet[] {Facelet.D3, Facelet.F9, Facelet.R7},
new Facelet[] {Facelet.D1, Facelet.L9, Facelet.F7},
new Facelet[] {Facelet.D7, Facelet.B9, Facelet.L7},
new Facelet[] {Facelet.D9, Facelet.R9, Facelet.B7},
};
static void Main(string[] args)
{
foreach (Corner i in Enum.GetValues(typeof(Corner)))
{
int cornerOrdinal = (int) i;
for (byte ori = 0; ori < 3; ori++)
{
Facelet currentCornerFacelet = cornerFacelet[cornerOrdinal][ori];
int faceletOrdinal = (int) currentCornerFacelet;
if (f[faceletOrdinal] == color.U || f[faceletOrdinal] == color.D)
{
break;
}
}
}
}
}
关于java - 在 for 循环中获取枚举的序数 [c#],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40871850/