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

本文关键字:分配 字符串 一个 两个 枚举 | 更新日期: 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方法。