如果int是同义词的Int32原因
enum MyEnum : Int32
{
Value = 1
}
Run Code Online (Sandbox Code Playgroud)
......不编译?在哪里
enum MyEnum : int
{
Value = 1
}
Run Code Online (Sandbox Code Playgroud)
即使将光标悬停在int字上,也会显示struct System.Int32?
我想声明一个非默认底层类型的新枚举.这有效:
public enum MyEnum : short
{ A, B, C, }
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么这不编译:
public enum MyEnum : System.Int16
{ A, B, C, }
Run Code Online (Sandbox Code Playgroud)
编译说
输入byte,sbyte,short,ushort,int,uint,long或ulong
我知道short是所有.NET版本(包括32/64位版本)的Int16的别名.我不明白为什么编译器在该特定情况下给别名赋予不同的含义.
任何解释?
鉴于以下代码:
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一样吗?
如果short只是使用Int16结构的C#语法,你可以像这样互换:
Int16 x = 10;
//or
short x = 10;
Run Code Online (Sandbox Code Playgroud)
那为什么你这样做:
public enum DaysOfWeek : short
{
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
public enum DaysOfWeek : Int16
{
}
Run Code Online (Sandbox Code Playgroud)
错误是 Type byte, sbyte, short, ushort, int, uint, long or ulong expected.
在回答另一个问题时,Jon Skeet提到有一个奇怪的事情正在进行定义enums.他的回答.
他声明,enum只有类型别名而不是框架类型(int有效,Int32不是等)才能重新定义a的基础类型.
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
Run Code Online (Sandbox Code Playgroud)
现在我试图重现(在VS2015中使用C#6/Roslyn),我没有得出相同的结论:
public enum TestEnum : UInt32
{
}
Run Code Online (Sandbox Code Playgroud)
和
public enum MyEnum : uint
{
}
Run Code Online (Sandbox Code Playgroud)
都是完全有效的.为什么会这样?或者改变了什么?
编辑:
所以为了清理事情,这是C#6中的一个变化,尚未记录,并且很快就会记录下来,因为你可以从Roslyn Github上的这个git问题中读到