-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;

我希望将 Ace 名称分配给枚举值 1 和 11。我怎样才能做到这一点?

4

4 回答 4

1

使用按位或运算符|

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[]存储点值。

于 2013-06-11T20:16:56.127 回答
1

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

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

或者您明确声明价值是标志性的:

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)
        ....
于 2013-06-11T20:21:08.373 回答
0

您需要 Enum 的Flags 属性并在其上使用 or 符号|

[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(就像我必须定义所有标志值一样)。

于 2013-06-11T20:21:02.847 回答
-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;}
}

我会使用这样的面向对象方法。

于 2013-06-11T20:17:42.400 回答