根据msdn枚举不能有基本类型的char。为什么enum没有基本类型的char?另外为什么微软强烈建议枚举包含一个值为0的常量?非常感谢你
答案 0 :(得分:5)
您可以找到C# language specification的链接。我认为限制的原因可能源于语言规范第4.1.5节中的这些陈述。
char类型被归类为整数类型,但它在两个方面与其他整数类型不同:
其他类型没有对char类型的隐式转换。特别是,即使sbyte,byte和ushort类型具有使用char类型可完全表示的值范围,也不存在从sbyte,byte或ushort到char的隐式转换。
char类型的常量必须写为字符文字或整数文字,并与强制转换为char类型。例如,(char)10与'\ x000A'相同。
至于为什么为零,因为未初始化的enum
的默认值为0。
答案 1 :(得分:3)
虽然正如你在这里看到的那样,你特别不允许定义一个字符枚举,因为没有从char到任何其他整数类型的隐式转换,有一个从 char到的整数转换整数,所以你可以这样做:
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());
(是的,它会发出哔哔声 - 就像过去的美好时光一样!)
答案 2 :(得分:2)
为什么枚举不能有基本类型的char?
因为它没有意义(与基本类型的浮点没有意义的方式大致相同)。在封面下,枚举是一个整数,但是因为char可以是任何unicode字符,所以实际上没有从chars到整数的可靠映射。
为什么microsoft强烈建议枚举包含一个值为0的常量?
因为未初始化的枚举的默认值为零(请参阅Enums should have zero value)
答案 3 :(得分:-1)
为什么枚举不能有基本类型的char?
我建议这是由于.NET将Chars作为unicode处理的方式,这意味着Char!= Byte(它的值可能大于255)。枚举也不能基于布尔类型,也是一个整数类型。同样使用Char作为基类型wouyld会复制现有的基类型,因此没有必要这样做。
为什么microsoft强烈建议枚举包含一个值为0的常量?
建议您始终具有等于0的值的原因是因为枚举是值类型,并且当创建新值时,它将具有值0.