2016-11-29 33 views
1

如何獲得for循環中枚舉的序數?在For循環中獲取枚舉的序數[c#]

我想是這樣的:

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;} 
+0

了'enum'的'int'值將由1日開始,在默認爲0和增量,所以只是將其鑄造成'int'應該給你你想要的這裏。 – juharr

+0

[從枚舉中獲取int值]的可能重複(http://stackoverflow.com/questions/943398/get-int-value-from-enum) –

+0

你想做的事情根本不清楚! – mybirthname

回答

0

您可以簡單地把枚舉對象int得到序數值。

所以:

int ordinalValue = (int) i; 

編輯:閱讀你的更新OP後,我想這應該是朝着正確方向邁出的一步。唯一的問題是colorColor之間的類型不匹配,如註釋部分所述。

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; 
       } 
      } 
     } 
    } 
} 
+0

是的,在這個簡單的corse案例中,在我的原始Programm中,需要if的一個值... if(f [cornerFacelet [i.ordinal(),ori] .ordinal()] ==顏色。 U || f [cornerFacelet [i.ordinal(),ori] .ordinal()] == color.D)'這是我如何在Java中創建它,但我不想要這樣做,因爲出於上下文沒有人知道我想做什麼....但感謝halp :) –

+0

好吧,如果你發佈完整的代碼,我們仍然可以幫助你,因爲問題不在於上下文,而是與你嘗試使用的方式C#。 – nbokmans

+0

在這個複雜的背景下,你的解決方案不是真正的工作...... –