我想知道为什么我们不能将"char"作为底层枚举类型.因为我们有byte,sbyte,int,uint,long,ulong,short,ushort作为底层枚举类型.二,枚举的默认底层类型是什么?
我知道这是一个较旧的问题,但这些信息对我有帮助:
在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.有关MSDN 的C#参考的更多信息.您还可以在MSDN上找到C#语言规范的链接.我认为限制的原因可能源于语言规范第4.1.5节中的这些陈述.
char类型被归类为整数类型,但它在两个方面与其他整数类型不同:
•其他类型没有隐式转换为char类型.特别是,即使sbyte,byte和ushort类型具有可使用char类型完全表示的值范围,也不存在从sbyte,byte或ushort到char的隐式转换.
•char类型的常量必须写为字符文字或整数文字,并与强制转换为char类型.例如,(char)10与'\ x000A'相同.
这是我正在使用的解决方法
enum MyEnum { AA = 'A', BB = 'B', CC = 'C' }; static void Main(string[] args) { MyEnum e = MyEnum.AA; char value = (char)e.GetHashCode(); //value = 'A' }