这是我目前的代码:
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。我怎么能这样做?
答案 0 :(得分: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[]
来存储点值。
答案 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方法。