c# - 等同于 C# 中枚举类型的索引?

标签 c# enums indexing

假设我有以下枚举类型:

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;

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

rank = ranks.four;

我该怎么做?

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

感谢您的帮助。 :)

最佳答案

(1) 命名约定:不要将枚举的名称复数化,除非它是一组可以一起或运算的“位标志”。

(2) 在枚举中总是有一个值为零的项目。枚举的默认初始化将赋予它零值,因此最好为其指定一个明确的名称(例如 None)。

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

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

枚举排名 { 没有任何, 高手, 二, ...

并且要将排名值(例如 5)转换为枚举,您可以强制转换:

排名rank = (Rank)5;

但是您最好编写一个方法来执行此操作,以便在转换之前检查范围,如果超出范围则抛出异常。

关于c# - 等同于 C# 中枚举类型的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10750856/

相关文章:

c# - 自定义 JsonConverter 在不应该使用 TokenType "EndObject"的情况下获取阅读器

Spring Boot Controller - 枚举参数作为值

java - 是循环内枚举的开关好风格

mysql - 高写表上的索引不好?

c# - Xamarin Handler.Post 不调用 IRunnable.Run()

c# - IQueryProvider 执行 IEnumerable 到 EnumerableQuery

oracle - 在现有表 Oracle 上创建索引

c - 索引二维矩阵(指针样式)- 错误 : cant index

c# - 匿名委托(delegate)作为函数参数

c# - 在 C# 中扩展枚举