在c#当我说:
var s = 0;
Run Code Online (Sandbox Code Playgroud)
应该是什么类型的s?它成功了int32.然后似乎var不适用于类似short和其他类型(?).
根据C#语言标准,特别是关于整数文字的§2.4.4.2:
整数文字的类型确定如下:
- 如果文字没有后缀,它具有第一这些类型的,其中它的值可以表示的:
int,uint,long,ulong.- 如果文字后缀为
U或u,则它具有这些类型中的第一个,其值可以表示为:uint,ulong.- 如果文字后缀为
L或l,则它具有这些类型中的第一个,其值可以表示为:long,ulong.- 如果文字是由后缀
UL,Ul,uL,ul,LU,Lu,lU,或lu,它的类型的ulong.
第一条规则就是这里需要应用的所有规则.文字0没有后缀,可以表示为类型int(或者,以BCL术语表示Int32),因此它具有类型.
正如您可以从上面推断的那样,要更改文字的类型,您可以为其添加后缀.例如,文字0u将是类型uint.或者,您可以显式地将文字转换为其他类型; 例如:(short)0会导致编译器将文字视为一个short.
小智 5
看看这个帖子在这里在StackOverflow上.
您可以为所有数字指定后缀.
var i = 0;
var d = 0d;
var f = 0f;
var l = 0L;
var m = 0m;
Run Code Online (Sandbox Code Playgroud)
根据规范(\xc2\xa7 2.4.4.2):
\n\n\n\n\n如果文字没有后缀,则它具有可以表示其值的第一种类型:
\nint,uint,long,ulong。
因此不会自动推断出较小的类型。您可以添加强制转换来强制使用较小的类型:
\n\nvar s = (short)0;\nRun Code Online (Sandbox Code Playgroud)\n