说我有以下枚举类型:
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)
我怎样才能做到这一点?
(为了这个例子的目的,假设我必须使用枚举,并且我知道还有其他集合更适合这个问题.)
谢谢您的帮助.:)
如上所述,你的枚举声明无效,但也许你想要做的更像是;
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)
(1)命名约定:不要将枚举的名称复数,除非它是一组可以一起存储的"位标志".
(2)枚举中始终有一个值为零的项.枚举的默认初始化将使其值为零,因此最好有一个明确的名称(例如,无).
(3)您可以将任何您喜欢的值强制转换为枚举,前提是它与枚举的基础类型(默认情况下为int32)相同.
所以你可以有一个看起来像这样的枚举:
enum Rank {None,Ace,Two,...}
并且要从等级值5转换为枚举值,您可以直接转换:
等级排名=(等级)5;
但是你最好编写一个方法,在强制转换之前检查范围,如果超出范围则抛出异常.