在C#中,int并且Int32是同样的事情,但我读了许多那个时代int优于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一样吗?
可能重复:
C#int,Int32和enum
这可能是一个相当基本/简单的问题,我正在通过以下方式创建枚举.
案例1编译完美.但案例2引发了错误.我理解int和Int32在C#中的含义相同.
情况1
[Flags]
public enum MyEnum : int
{
Red = 0x1,
Green = 0x2,
Blue = 0x4
}
Run Code Online (Sandbox Code Playgroud)
案例2
[Flags]
public enum MyEnum : Int32
{
Red = 0x1,
Green = 0x2,
Blue = 0x4
}
Run Code Online (Sandbox Code Playgroud)
这里的区别是什么以及当enum的成员被指定为Int32类型时C#不编译代码的原因是什么?
在回答另一个问题时,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问题中读到