.NET枚举字符的基类型
根据枚举,枚举不能具有字符的基类型。为什么枚举不能有字符的基类型?另外,为什么microsoft强烈建议枚举包含值为0的常量?多谢各位 为什么枚举不能有字符的基类型 我认为这是由于.NET将字符作为unicode处理,这意味着字符!=字节(其值可以大于255)。枚举也不能基于布尔类型,该类型也是整数类型。同时,使用Char作为基类型也会复制现有的基类型,因此这样做没有意义 为什么microsoft强烈建议枚举包含值为0的常量.NET枚举字符的基类型,.net,enums,char,.net,Enums,Char,根据枚举,枚举不能具有字符的基类型。为什么枚举不能有字符的基类型?另外,为什么microsoft强烈建议枚举包含值为0的常量?多谢各位 为什么枚举不能有字符的基类型 我认为这是由于.NET将字符作为unicode处理,这意味着字符!=字节(其值可以大于255)。枚举也不能基于布尔类型,该类型也是整数类型。同时,使用Char作为基类型也会复制现有的基类型,因此这样做没有意义 为什么microsoft强烈建议枚举包含值为0的常量 建议您始终将值设置为0的原因是,枚举是一种值类型,创建新枚举时,其值将
建议您始终将值设置为0的原因是,枚举是一种值类型,创建新枚举时,其值将为0。您可以找到指向的链接。我认为限制的原因可能来自语言规范第4.1.5节中的这些陈述 char类型被分类为整数类型,但它与其他整数类型有两种不同:
- 没有从其他类型到char类型的隐式转换。特别是,即使sbyte、byte和ushort类型具有可使用char类型完全表示的值范围,也不存在从sbyte、byte或ushort到char的隐式转换
- char类型的常量必须作为字符文本或整数文本写入,并与cast to type char结合使用。例如,(char)10与'\x000A'相同
枚举的默认值为0
为什么枚举不能有字符的基类型
因为它实际上没有意义(与基本类型的float没有意义大致相同)。在封面下,枚举是一个整数,但是由于字符可以是任何unicode字符,因此实际上没有从字符到整数的有效映射
为什么microsoft强烈建议枚举包含值为0的常量
由于未初始化枚举的默认值为零(请参见),尽管如您在此处所见,由于不存在从字符到任何其他整数类型的隐式转换,因此不允许您定义字符枚举,但存在从字符到整数的整数转换,因此您可以执行以下操作:
public enum MyCharEnum
{
BEL = 0x07,
CR = 0x0D,
A = 'A',
z = 'z'
}
并使用到char的显式转换,因此:
MyCharEnum thing = MyCharEnum.BEL;
char ch = (char)thing;
System.Console.WriteLine(ch.ToString());
(是的,它会发出嘟嘟声——就像过去的好日子一样!)+1,尽管您链接到的页面不是C语言规范。)@托马斯:哎呀,让我来修理that@gh9:顺便说一句,这是第11.1.5节,而不是第4.1.5节-哦,我不知道255与任何事情有什么关系。毕竟,枚举的默认支持者是int。(不是我的下一票*)枚举可以有一个16位的双数据类型,就像CHAR一样。因此,如果一个枚举可以接受一个双精度值,那么它不能接受一个字符并没有什么真正的原因。感谢您解释0值,我没有这样想。@gh9-为什么要投反对票?我在.NET中解释了这一点字节,虽然它是一个整数类型,但不能用于枚举的基础。您也不能将枚举基于布尔值,而布尔值是整数类型@gh9-该声明存在两个问题。首先,您不能使用DOUBLE作为枚举的类型,而DOUBLE是64位浮点数,而不是16位整数。@Anthony我的意思是您可以将字节转换为整数。@Kragen,为什么您说没有合适的从字符到整数或(在您的注释中)从字节到整数的映射?两者都有一个隐式转换,因为整数是32位的,所以即使字符与Unicode字符相关,溢出也没有问题。当然,另一种方法是,因为32位整数可能会溢出字符或字节,但这似乎不是您要说的。我肯定我误解你了?