2013-06-11 109 views
-1

這是我此刻的代碼:如何將兩個枚舉值分配給一個字符串?

enum values { one, two, three, four, five, six, seven, eight, nine, ten, eleven }; 
    private void button1_Click(object sender, EventArgs e) 
    { 
     values Ace = values.one; 
     values Ace = values.eleven; 
     values King = values.ten; 
     values Queen = values.ten; 
     values Jack = values.ten; 
     values Ten = values.ten; 
     values Nine = values.nine; 

我想王牌名稱分配給一個十一的枚舉值。我怎樣才能做到這一點?

+2

你爲什麼要使用枚舉值?這也許應該通過一些不錯的,清晰的,面向對象的類來表示 –

+0

http://stackoverflow.com/questions/17052091/array-for-blackjack-cards-strings-or-integers-c-sharp-newbie看到了這個問題,我之所以選擇使用枚舉的原因 –

+0

因爲某種原因,我在我的問題中放置了C#Newbie,所以當我不知道如何做時,人們不會拋出大量新單詞,給出不同的方式和更簡單的方法。 –

回答

1

使用bitwise or operator|

values Ace = values.one | values.eleven; 

但是,你除非你定義一個標誌您的枚舉變得非常古怪的行爲。

[Flags] 
enum values 
{ 
    one = 0x1, 
    two = 0x2, 
    three = 0x4, 
    four = 0x8, 
    six = 0x01, 
    seven = 0x02, 
    eight = 0x04, 
    nine = 0x08, 
    ten = 0x001, 
    eleven = 0x002 
} 

所有這一切放在一邊,如果你使用的是values枚舉確定分數值以及enum不正確的結構。嘗試使用int[]來存儲點值。

+0

非常感謝! –

+3

他還需要聲明枚舉'Flags' –

+0

用於定義標誌值的詭計,使用左移運算符,並且不需要記住兩個冪('1 << 0 == 1','1 << 1 == 2','1 << 2 == 4'等等)使得它更容易閱讀。 –

-1
class Card 
{ 
    public string Name { get; set; } 
    public int Values[] { get; set; } // alternatively, an enum 

    // Examples of how I would expand this for use in a game 
    public String Suit { get; set; } // alternatively, an enum. 
    public Boolean Dealt { get; set;} 
} 

我會使用這樣的面向對象方法。

+0

當你只是想提供其他組合的枚舉值時,這是過度的。 – DonBoitnott

+1

我不同意,枚舉標誌是危險的,它不能正確表示他的域名。使用「真正」.Net類將會證明他的解決方案並使其更加清潔。 – Jay

+0

好吧,枚舉在OOP中也被廣泛使用。但無論如何,你提出的解決方案在我看來並沒有增加對枚舉的多少尊重,並且你鬆開了intellisense和語法檢查。 –

0

您需要Flags attribute您枚舉,並使用或符號就可以了|

[Flags] 
enum values { one = 1 << 0, two = 1 << 1, three = 1 << 2, four = 1 << 3, five = 1 << 4, six = 1 << 5, seven = 1 << 6, eight = 1 << 7, nine = 1 << 8, ten = 1 << 9, eleven = 1 << 10 }; 

private void button1_Click(object sender, EventArgs e) 
{ 
    values Ace = values.one | values.eleven; 
    values King = values.ten; 
    values Queen = values.ten; 
    values Jack = values.ten; 
    values Ten = values.ten; 
    values Nine = values.nine; 

您可能需要修改你的一些其他的代碼來處理的事實,值現在是Flags風格枚舉(如我如何定義所有的標誌值)。

1

可以使用按位或操作IIF: 你枚舉有Flags屬性:

[Flags] 
enum values { one, two....} 

,或者你顯式聲明值是flagwise

即:enum{one=1,two=2,three=4,four=8,five=16 ...}

正如你所看到的,通過選擇後面的兩個冪,你只需要設置一個位就可以得到每個值:

1= 00000001 
2= 00000010 
4= 00000100 
8= 00001000 
16=00010000 

這個策略,你可以按位結合的任何標誌,二進制代表應該幫助找出原因。否則,按位或運算符會錯誤地重疊某些值。

注重正常==操作人員,如果你有一個綜合值,你需要覈對單一個,失敗必須檢查帶口罩:

if((value.one & yourvar)!=0) 
     .... 
相關問題