如何将两个枚举值分配给一个字符串
本文关键字:分配 字符串 一个 两个 枚举 | 更新日期: 2023-09-27 18:17:52
这是我目前拥有的代码:
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。我该怎么做?
使用按位或运算符:|
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[]
来存储点值。
您需要枚举
的 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
样式枚举的事实(就像我必须定义所有标志值一样(。
您可以使用按位或运算符 iif:您的枚举具有Flags
属性:
[Flags]
enum values { one, two....}
或者显式声明标志值:
即: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)
....
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方法。