为什么“var”关键字设置为特定类型?

时间:2012-09-13 22:57:48

标签: c# anonymous-types

为什么var a = 7;会将a类型设置为某种类型(即int而不是byte)? C#编译器是否有任何规则/默认/检查?

7 个答案:

答案 0 :(得分:14)

目前尚不清楚“动态”是什么意思 - 但C#编译器只是遵循规范中规定的规则。对于那种声明:

var a = expression;

a的类型是expression的类型。表达式7的类型为int,但已知为byte范围内的常量,允许:

byte a = 7;

编译。转换为byte可用性不会更改表达式7的类型,因此int是C#编译器使用的类型a

请注意,我建议不要将var用于此类常量。它最终会导致代码在intuintlong等边界处变得非常混乱。var旨在帮助匿名类型,并帮助使代码更多可读。当它使代码 less 可读时,就不要使用它。

答案 1 :(得分:2)

编译器会将代码中没有后缀的任何整数文字视为int

所以这个:

byte myByte = 255;

..实际上是隐式地将int常量255转换为字节。

这就是为什么var被认为是一个整数...因为编译器默认使用整数文字。

如果你这样做:

var a = 7L;

A类型为long

答案 2 :(得分:1)

有默认值,我无法告诉你所有这些。类似于如果你调用5/7它默认为整数除法。但如果你做5 / 7.0那么它会做常规分割。 var只是将类型设置为指定值的类型,在没有强制转换的情况下,默认情况下它是一个整数。

答案 3 :(得分:0)

var并不意味着"在运行时确定类型",它意味着"使用赋值运算符右侧表达式的结果类型来确定类型。 "它是在编译时确定的。

答案 4 :(得分:0)

根据manual

  

隐式类型的局部变量是强类型的,就像你一样   我自己声明了类型,但编译器确定了类型。

and

  

var关键字指示编译器推断出类型   来自初始化右侧表达式的变量   言。

简单而言,编译器将检查分配给变量的数据的最低可用类型,并将该变量强类型为该数据类型。

答案 5 :(得分:0)

var关键字自动将给定值设置为编译器可以转换的类型。例如:var s ="&#34 ;;包含一个字符串,并将成为一个字符串。

答案 6 :(得分:-2)

它将a设置为表达式类型,因为var是一般类型,因为CLR为您处理所需的内存管理,并将确定表达式的类型并使变量成为该类型。