为什么我们不能有"char"枚举类型

Pra*_*rma 41 c# enums char

我想知道为什么我们不能将"char"作为底层枚举类型.因为我们有byte,sbyte,int,uint,long,ulong,short,ushort作为底层枚举类型.二,枚举的默认底层类型是什么?

kad*_*d81 77

我知道这是一个较旧的问题,但这些信息对我有帮助:

在C#.NET 4.0中使用char作为枚举的值类型似乎没有问题(可能甚至是3.5,但我没有对此进行测试).这就是我所做的,它完全有效:

public enum PayCode {
    NotPaid = 'N',
    Paid = 'P'
}
Run Code Online (Sandbox Code Playgroud)

将Enum转换为char:

PayCode enumPC = PayCode.NotPaid;
char charPC = (char)enumPC; // charPC == 'N'
Run Code Online (Sandbox Code Playgroud)

将char转换为Enum:

char charPC = 'P';
if (Enum.IsDefined(typeof(PayCode), (int)charPC)) { // check if charPC is a valid value
    PayCode enumPC = (PayCode)charPC; // enumPC == PayCode.Paid
}
Run Code Online (Sandbox Code Playgroud)

像魅力一样,就像你对char类型的期望一样!

  • 赞成你的答案,但要注意答案中的枚举仍然有`int`作为基础类型.编译器将其视为`int`.希望C#没有这种边缘情况. (8认同)

tva*_*son 15

默认类型是int.有关MSDN 的C#参考的更多信息.您还可以在MSDN上找到C#语言规范的链接.我认为限制的原因可能源于语言规范第4.1.5节中的这些陈述.

char类型被归类为整数类型,但它在两个方面与其他整数类型不同:

•其他类型没有隐式转换为char类型.特别是,即使sbyte,byte和ushort类型具有可使用char类型完全表示的值范围,也不存在从sbyte,byte或ushort到char的隐式转换.

•char类型的常量必须写为字符文字或整数文字,并与强制转换为char类型.例如,(char)10与'\ x000A'相同.


Emi*_*mir 13

这是我正在使用的解决方法

enum MyEnum
{
    AA = 'A',
    BB = 'B',
    CC = 'C'
};

static void Main(string[] args)
{
    MyEnum e = MyEnum.AA;
    char value = (char)e.GetHashCode(); //value = 'A'
}
Run Code Online (Sandbox Code Playgroud)

  • 或者你可以在没有`GetHashCode()`的情况下编写`(char)e`. (6认同)
  • 你需要的只是`(char)e`.[你要通过'enum.GetHashCode`来招致拳击惩罚.](http://stackoverflow.com/questions/7995606/boxing-occurrence-in-c-sharp) (4认同)