C#编译器如何解释var关键字指定的对象?我们何时必须使用此关键字?
答案 0 :(得分:6)
有时您需要使用var,例如,在使用匿名类型时,例如在LINQ查询中:
var results = context.People.Select(p => new {p.PersonID, p.Name});
在那里看到新的{}行?那将返回一个在编译时生成的类。由于此类没有名称,因此在代码中引用它的唯一方法是使用“var”。这减少了你必须为LINQ结果集创建吨和吨的特殊用途类。
在幕后,无论你是将var用作另一种类型的简写,还是使用匿名类型,你仍然在进行静态的编译时类型检查。未使用动态类型。编译器按字面意思确定编译时应该是什么类型,所以程序如:
var i = 12;
i = i + "foo!";
不会编译。
答案 1 :(得分:4)
从Visual C#3.0开始,在方法范围声明的变量可以具有隐式类型var
。隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型。
答案 2 :(得分:2)
在Var声明中,
编译器从中推断出类型 分配值
on
var a = 100; // compiler assumes a is a integer
var b = "test"; // compiler assumes b is a string
因为对象不强制执行类型安全
object objtest = 1;
objtest = "test";
这很好。
但var强制执行类型安全
var a = 100;
a= "test";
这不会编译,并且会给出编译时错误。
RootClass rt = new RootClass ();
List<RootClass > rt = new List<RootClass >();
你可以这样写
var aaaaaa = new RootClass ();
var ls = new List<RootClass>();
答案 3 :(得分:1)
如果你的意思是变量声明中使用的“var”关键字,那么就没有“var type”这样的东西。这个“var”被解释(在编译时)作为从赋予变量的表达式推断出的类型。