当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么我们不能有"char"枚举类型》经验,为你挑选了3个好方法。

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



1> kad81..:

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

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

public enum PayCode {
    NotPaid = 'N',
    Paid = 'P'
}

将Enum转换为char:

PayCode enumPC = PayCode.NotPaid;
char charPC = (char)enumPC; // charPC == 'N'

将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
}

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


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

2> tvanfosson..:

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

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

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

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



3> Emir..:

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

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

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


或者你可以在没有`GetHashCode()`的情况下编写`(char)e`.
你需要的只是`(char)e`.[你要通过'enum.GetHashCode`来招致拳击惩罚.](http://stackoverflow.com/questions/7995606/boxing-occurrence-in-c-sharp)
推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有