如何将两个枚举值分配给一个字符串?

时间:2013-06-11 20:12:18

标签: c# enumeration assign

这是我目前的代码:

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;

我希望将Ace名称分配给Enumeration值1和11。我怎么能这样做?

4 个答案:

答案 0 :(得分: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[]来存储点值。

答案 1 :(得分:1)

您可以使用按位或运算符iif: 您的枚举有Flags属性:

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

或明确声明 flagwise 的值:

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

正如您所看到的,通过选择2的后续幂,您只需设置一个位值即可得到每个值:

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

使用此策略,您可以按位组合任何标志,二进制代表应该有助于找出原因。 否则按位或运算符将错误地重叠某些值。

注意普通==运算符如果你有一个组合值就会失败,你需要检查一个,你必须检查一个掩码:

if((value.one & yourvar)!=0)
        ....

答案 2 :(得分:0)

您的Enum需要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样式枚举的事实(就像我必须定义所有标志值一样)。

答案 3 :(得分:-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;}
}

我会使用像这样的OO方法。