相当于c#中枚举类型的索引?

Nat*_*ate 4 c# indexing enums

说我有以下枚举类型:

private enum ranks { ace = "Ace", two = "2", three = "3", four = "4", five = "5", six = "6", seven = "7", 
                     eight = "8", nine = "9", ten = "10", jack = "Jack", queen = "Queen", king = "King" }

ranks rank;
Run Code Online (Sandbox Code Playgroud)

我知道我可以做像sizeof(排名)这样的事情,但有没有办法获得排名第n项?假设用户输入4并且我想将排名设置为第4个枚举而不明确地执行:

rank = ranks.four;
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

(为了这个例子的目的,假设我必须使用枚举,并且我知道还有其他集合更适合这个问题.)

谢谢您的帮助.:)

RJ *_*han 7

如上所述,你的枚举声明无效,但也许你想要做的更像是;

private enum Ranks
{
    Ace = 1,
    Two = 2,
    Three = 3,
    . . .
    Jack = 11,
    Queen = 12,
    King = 13
}


public void SomeMethod()
{ 
    Ranks rank = Ranks.Jack;
    int rankValue = (int)rank;
    string rankName = rank.ToString();
}

public Ranks GetRank(int i)
{
    string name = Enum.GetName(typeof (Ranks), i);
    if (null == name) throw new Exception();
    return (Ranks)Enum.Parse(typeof (Ranks), name);
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*son 7

(1)命名约定:不要将枚举的名称复数,除非它是一组可以一起存储的"位标志".

(2)枚举中始终有一个值为零的项.枚举的默认初始化将使其值为零,因此最好有一个明确的名称(例如,无).

(3)您可以将任何您喜欢的值强制转换为枚举,前提是它与枚举的基础类型(默认情况下为int32)相同.

所以你可以有一个看起来像这样的枚举:

enum Rank {None,Ace,Two,...}

并且要从等级值5转换为枚举值,您可以直接转换:

等级排名=(等级)5;

但是你最好编写一个方法,在强制转换之前检查范围,如果超出范围则抛出异常.