【问题标题】:Using int values in enum declaration在枚举声明中使用 int 值
【发布时间】:2016-05-17 00:24:11
【问题描述】:

我想创建像这样的枚举类型:

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

有什么办法吗?

【问题讨论】:

  • 你可以拼出来 - Two, Three
  • 你能把int改成字符串“2”、“3”吗?
  • @Brett:这应该如何工作?请给我们举个例子。
  • 不可能因为同样的原因你不能写var 2 = "test"。标识符不能以数字开头。
  • @TranceAddict 如果您的意思是向用户显示 - 这是完全可行的。但是不可能做你想做的事。您无法将标识符简单地设为数字。

标签: c# enums


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    简短回答:


    常规答案:只需使用字符并获取如下数值:

    int numericValueOne = (int)Value.Ace;
    int numericValueTwo = (int)Value.Two;
    

    长答案:如果最终用途是一副纸牌,这是一个很好的实现:

    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) 和/或类。此外,您可以根据需要将任何操作、方法、属性添加到类中,并且在存储或传输数据时只需使用数字即可。 Ref

    【讨论】:

      【解决方案3】:

      你可以这样做:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-26
        • 2014-06-30
        • 2011-10-23
        • 2010-10-01
        • 2014-07-30
        相关资源
        最近更新 更多