.NET Enum基本类型的Char

时间:2011-08-05 15:46:03

标签: .net enums char

根据msdn枚举不能有基本类型的char。为什么enum没有基本类型的char?另外为什么微软强烈建议枚举包含一个值为0的常量?非常感谢你

4 个答案:

答案 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.