Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#int、Int32和枚举_C#_.net_Enums_Int_Int32 - Fatal编程技术网

C#int、Int32和枚举

C#int、Int32和枚举,c#,.net,enums,int,int32,C#,.net,Enums,Int,Int32,如果int与Int32同义,为什么 enum MyEnum : Int32 { Value = 1 } …不编译?何处为 enum MyEnum : int { Value = 1 } 将,即使将光标悬停在int单词上,也会显示struct System.Int32?基础类型确实是相同的,但编译器取决于要作为确切别名的类型。这是一个基于解析的编译错误。我查看了C#语法规范和基于别名(例如“int”、“unit”……等)定义为标记的底层类型。解析器需要整数类型语法规则中的特定字

如果
int
Int32
同义,为什么

enum MyEnum : Int32
{
    Value = 1
}
…不编译?何处为

enum MyEnum : int
{
    Value = 1
}

将,即使将光标悬停在int单词上,也会显示struct System.Int32?

基础类型确实是相同的,但编译器取决于要作为确切别名的类型。这是一个基于解析的编译错误。我查看了C#语法规范和基于别名(例如“int”、“unit”……等)定义为标记的底层类型。解析器需要整数类型语法规则中的特定字符串

该错误是一个解析错误,即使这两个
enum enum:int
的含义与
enum enum:Int32
相同

我不知道为什么要对解析步骤进行此限制,但我可以试着猜测:因为Int32不是一个关键字,所以它可能引用实际的int结构以外的内容。如果解析器必须知道类型才能为每个基类型构建不同的类型,那么它不能依赖于不是关键字的令牌


尽管C#规范将int关键字定义为explicit alias System.Int32,但在解析步骤中获取有关显式类型(Int32)的信息仍然是一个问题,因为它需要大量在此步骤中无法推断的上下文信息。

。。。语言规范规定(14.1):

枚举声明可以显式声明基本类型的byte、sbyte、short、ushort、int、uint、long或ulong。请注意,char不能用作基础类型。未显式声明基础类型的枚举声明的基础类型为int


但是由于
int
通常是系统的别名。Int32认为两者都可以工作并不是不合理的。。。但事实并非如此。这通常不是什么大问题,但仍然很有趣。

编译时的错误是什么?@Donnie:Type byte、sbyte、short、ushort、int、uint、long或ulong。显然,.Net中的限制强制用户在enum.interest中只使用关键字而不是类名。学到了一些东西,耶!这看起来像是C#和/或规范中的一个bug。我请Eric Lippert解释一下!编译器正确地实现了规范,MS认为规范是正确的,所以它不是一个“错误”,只是“不直观的行为”。这意味着,不太可能很快得到修复。另请参阅此MS Connect错误,其中他们解释了不更改bahvior:@MichaelEdenfield的理由,即Microsoft Connect链接不可访问。你能证明它应该是公开的吗?我发现此错误
无法找到您请求的内容,或者您没有查看该内容的权限。如果您认为访问此页面时出错,请单击页面顶部的“帮助”链接以报告问题,并将此ID包含在电子邮件中:e4c85df6-9343-4045-88d2-fc2d64bd01de
否,不幸的是,连接链接在某些点后过期。这个bug的要点是“int”是一个关键字,“Int32”是一个类型,解析器当前期望一个有效的“keyword”作为枚举基类型。更改行为需要更改关键字到类型替换与枚举类型解析步骤的顺序,这是一个非常微小的更改,因此它很可能不会发生(除非在同一区域发生其他相关更改)。谢谢。发现一个不同的:它被标记为“不会修复”:立即生效,请参阅