鉴于以下代码:
static void Main()
{
Console.WriteLine(typeof(MyEnum).BaseType.FullName);
}
enum MyEnum : ushort
{
One = 1,
Two = 2
}
Run Code Online (Sandbox Code Playgroud)
它输出System.Enum,这意味着这里的冒号与继承无关,它只是指定了枚举的基本类型,对不对?
但是,如果我更改我的代码如下:
enum MyEnum : UInt16
{
One = 1,
Two = 2
}
Run Code Online (Sandbox Code Playgroud)
我会得到一个编译错误.为什么?是不是UInt16和ushort一样吗?
Ben*_*igt 12
你是正确的,反射不会报告枚举继承基类型,规范称之为"基础类型".你可以用它找到它Enum.GetUnderlyingType.
由ushort和命名的类型System.UInt16完全相同.
但是,语法enum不会调用类型.相反,它需要一组有限的关键字来控制基础类型.虽然System.UInt16是有效的基础类型,但它不是C#语法允许在该位置出现的关键字之一.
引用语法:
枚举声明:
attributes opt enum-modifiers opt identifier enum-base opt enum-body opt
enum;枚举:
:整体式积分型:
sbyte
byte
short
ushort
int
uint
long
ulong
char
因为枚举的有效类型被明确指定为整数类型(除外char).
枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong.
http://msdn.microsoft.com/en-us/library/sbbt4032.aspx
人们会期望UInt16它等同于ushort给定的内置类型的文档:
C#类型关键字及其别名是可互换的.例如,您可以使用以下任一声明声明整数变量...
http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx
编辑:我已经把这个答案弄乱了几次并没有完全掌握正确的答案.@BenVoight是正确的.接受的列表是整数类型(除了char)System.UInt16与类型完全相同ushort,但它不是语法指定的整数类型标识符(仅仅是结构类型).
| 归档时间: |
|
| 查看次数: |
3585 次 |
| 最近记录: |