枚举的范围是多少?

CJ7*_*CJ7 8 c# enums

例如,在C#中,您可以在枚举类型中使用数字范围吗?

public enum BookType
{
    Novel = 1,
    Journal = 2,
    Reference = 3,
    TextBook = 4 .. 10
}
Run Code Online (Sandbox Code Playgroud)

编辑:需要的原因是从数字转换为枚举类型,例如:

int iBook = 5
BookType btBook = (BookType)ibook
Debug.Print "Book " + ibook + " is a " btBook
Run Code Online (Sandbox Code Playgroud)

预期的输出是:第5册是一本教科书

Gab*_*art 11

正如其他人所说的那样,不可能.如果它们是标志,则可以组合枚举值:

[Flags]
public enum BookType
{
    Novel = 0,
    Journal = 1 << 0,
    Reference = 1 << 1,
    TextBook1 = 1 << 2,
    TextBook2 = 1 << 3,
    TextBook3 = 1 << 4,
    TextBook4 = 1 << 5,
    TextBook5 = 1 << 6,
    TextBooks1To5 = TextBook1 | TextBook2 | TextBook3 | TextBook4 | TextBook5
}
Run Code Online (Sandbox Code Playgroud)


Bev*_*van 8

根据C#标准(p612,C#编程语言),给定枚举的值必须是一个常量整数(或任何类似的类型 - 长,字节,字节,短等),因此一系列值无效.

我的编译器(VS2008)同意该规范.

由于您无法在枚举中重复名称,因此您最接近的名称是这样的:

public enum BookType
{
    Novel = 1,
    Journal = 2,
    Reference = 3,
    TextBook4 = 4,
    TextBook5 = 5, ...
    TextBook10 = 10
}
Run Code Online (Sandbox Code Playgroud)

这其实非常难看.也许枚举不能解决您的特定问题......

  • 和逻辑一样.枚举的重点是用代码(希望)描述性文本替换代码中的幻数.如果允许范围,编译器将如何知道用您的枚举文本替换哪个幻数? (4认同)
  • 整数并不是必要的.你可以使用base-type选项来声明其成员类型为long,byte,sbyte,short,ushort,uint,ulong等的枚举 (2认同)