C# 在枚举声明中使用int值

C# 在枚举声明中使用int值,c#,enums,C#,Enums,我想创建枚举类型,如: enum Ranks{ 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, Ace} 有什么方法可以做到这一点吗?似乎没有优雅的方法可以做到这一点,所以这里有一个技巧:在每个整数的开头加一个下划线 enum LikeThis { _1, _2, _3, _4, _5, _6 } 似乎没有优雅的方法可以做到这一点,所以这里有一个技巧:在每个整数的开头加一个下划线 enum LikeThis { _1, _2, _3, _4, _

我想创建枚举类型,如:

enum Ranks{ 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, Ace}

有什么方法可以做到这一点吗?

似乎没有优雅的方法可以做到这一点,所以这里有一个技巧:在每个整数的开头加一个下划线

enum LikeThis { _1, _2, _3, _4, _5, _6 }

似乎没有优雅的方法可以做到这一点,所以这里有一个技巧:在每个整数的开头加一个下划线

enum LikeThis { _1, _2, _3, _4, _5, _6 }

简短回答:


常规答案:简单地使用字符并获得如下数值:

int numericValueOne = (int)Value.Ace;
int numericValueTwo = (int)Value.Two;
enum Ranks { Ace = 'A', Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten, King = 'K', Queen = 'Q', Jack = 'J' };

详细回答:如果最终用途是一副牌,这是一个很好的实现:

public class Card
{
    private readonly Suit _suit;
    private readonly Value _value;

    public Card(int number)
    {
        _suit = (Suit)(number / 13);  // 0 = Hearts, 1 = Diamonds ...
        _value = (Value)(number % 13 + 1);  // 1 = ace, 2 = two
    }

    public Suit Suit
    {
        get { return _suit; }
    }

    public Value Value
    {
        get { return _value; }
    }

    public int ToNumber()
    {
        return (int)_suit * 13 + ((int)_value - 1);
    }
}

public enum Suit
{
    Hearts = 0,
    Diamonds = 1,
    Clubs = 2,
    Spades = 3
}

public enum Value
{
    Ace = 1,
    Two = 2,
    Three = 3,
    Four = 4,
    Five = 5,
    Six = 6,
    Seven = 7,
    Eight = 8,
    Nine = 9,
    Ten = 10,
    Jack = 11,
    Queen = 12,
    King = 13,
}

在这个类中包装两个枚举的好处是,您可以将每个卡用作一个数字(0-52)和/或一个类。此外,您还可以根据需要向类添加任何操作、方法和属性,并且在存储或传输数据时,只需使用数字即可

简短回答:


常规答案:简单地使用字符并获得如下数值:

int numericValueOne = (int)Value.Ace;
int numericValueTwo = (int)Value.Two;
enum Ranks { Ace = 'A', Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten, King = 'K', Queen = 'Q', Jack = 'J' };

详细回答:如果最终用途是一副牌,这是一个很好的实现:

public class Card
{
    private readonly Suit _suit;
    private readonly Value _value;

    public Card(int number)
    {
        _suit = (Suit)(number / 13);  // 0 = Hearts, 1 = Diamonds ...
        _value = (Value)(number % 13 + 1);  // 1 = ace, 2 = two
    }

    public Suit Suit
    {
        get { return _suit; }
    }

    public Value Value
    {
        get { return _value; }
    }

    public int ToNumber()
    {
        return (int)_suit * 13 + ((int)_value - 1);
    }
}

public enum Suit
{
    Hearts = 0,
    Diamonds = 1,
    Clubs = 2,
    Spades = 3
}

public enum Value
{
    Ace = 1,
    Two = 2,
    Three = 3,
    Four = 4,
    Five = 5,
    Six = 6,
    Seven = 7,
    Eight = 8,
    Nine = 9,
    Ten = 10,
    Jack = 11,
    Queen = 12,
    King = 13,
}

在这个类中包装两个枚举的好处是,您可以将每个卡用作一个数字(0-52)和/或一个类。此外,您还可以根据需要向类添加任何操作、方法和属性,并且在存储或传输数据时,只需使用数字即可

您可以这样做:

int numericValueOne = (int)Value.Ace;
int numericValueTwo = (int)Value.Two;
enum Ranks { Ace = 'A', Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten, King = 'K', Queen = 'Q', Jack = 'J' };
然后在列组上执行如下切换:

switch (Rank)
{
    case Ranks.Two:
    case Ranks.Three:
    case Ranks.Four:
        // Cast to an int and display it
        break;

    case Ranks.Ace:
    case Ranks.King:
    case Ranks.Queen:
    case Ranks.King:
        // Cast to char and display it
        break;
}

我在我写的一个简单的21点游戏中使用了它,效果很好

你可以这样做:

int numericValueOne = (int)Value.Ace;
int numericValueTwo = (int)Value.Two;
enum Ranks { Ace = 'A', Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten, King = 'K', Queen = 'Q', Jack = 'J' };
然后在列组上执行如下切换:

switch (Rank)
{
    case Ranks.Two:
    case Ranks.Three:
    case Ranks.Four:
        // Cast to an int and display it
        break;

    case Ranks.Ace:
    case Ranks.King:
    case Ranks.Queen:
    case Ranks.King:
        // Cast to char and display it
        break;
}

我在我写的一个简单的21点游戏中使用了这个,效果很好

你可以拼出来-
Two
Two
你能把int改成字符串“2”,“3”吗?@Brett:这应该怎么办?请给我们举一个例子。这与您不能编写
var 2=“test”
的原因是不可能的。标识符不能以数字开头。@TranceAddict如果您的意思是在向用户显示时显示为-这是完全可行的。但是你不可能做你想做的事。你不可能把标识符简单地变成一个数字。你可以把它拼出来-
Two
Two
你能把int改成字符串“2”,“3”吗?@Brett:这是怎么回事?请给我们举一个例子。这与您不能编写
var 2=“test”
的原因是不可能的。标识符不能以数字开头。@TranceAddict如果您的意思是在向用户显示时显示为-这是完全可行的。但是你不可能做你想做的事。您无法将标识符简单地设置为一个数字。