2016-05-17 20 views
1

私のような列挙型を作成したいの使用:列挙型宣言でint型の値

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

はそれを行うための方法はありますか?

+3

「Two」、「Three」 –

+0

intを文字列「2」、「3」に変更できますか? – Brett

+1

できませんが、[許容可能な回避策](http://stackoverflow.com/questions/2952192/how-can-i-create-an-enum-using-numbers)がたくさんあります。 –

答えて

0

これを行うにはエレガントな方法がないようですので、ここではハックです:各整数の先頭にアンダースコアを付け加えてください!

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

短い答え:ません


正規の答え:単に使用文字と、このような数値を取得:

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

長い答え:もしを最終的な使用法はカードのデッキのためですsが偉大な実装です:

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)、および/またはクラスとして各カードを使用することができるということです。さらに、必要に応じて操作、メソッド、プロパティをクラスに追加することができます。データを保存または送信するときには、その番号のみを使用する必要があります。

enum Ranks { Ace = 'A', Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten, King = 'K', Queen = 'Q', Jack = 'J' }; 

そして、そのようにランク上のスイッチを実行します:あなたはこのような何か行うことができますRef

0

私は私が書いたシンプルなブラックジャックのゲームでこれを使用

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

を、うまく