我阅读了一篇关于using C# 3 features in C# 2的文章,您可以在其中输入var x = 2;
,即使项目是2.0项目,Visual Studio 2008编译器也会选择它并生成相同的代码。如果您输入int x = 2
。
但我不知道的是,在某些情况下你不这样做吗?我一直认为var
关键字直到C#3才到达。如果编译器生成相同的代码并且我可以输入C#3代码和C#2代码完全相同,那么真正的差异是什么,因为CLI是一样的,对吧?
从上面的链接引用
在幕后,编译器生成常规的.NET 2.0代码。
.NET 2.0代码和.NET 3代码之间有什么区别吗?
答案 0 :(得分:25)
我担心你混淆了C#版本和.NET版本。
你不能在C#2.0中使用var
,编译器会认为它只是一个标识符。但是你可以在面向.NET 2.0的C#3.0中使用它,因为var
只是一种语言(C#)结构,而不是.NET结构。 .NET编译器会将其转换为生成的CIL中的相应类型,因此JIT编译器永远不会看到它,您将完全正常。
由于VS2008编译器是C#3.0编译器,因此无论您使用的是哪个.NET版本,都可以使用var
进行编译。
答案 1 :(得分:7)
var是VS2008使用的C#3语言中的合成糖。代码仍然可以编译为.net 2.0兼容。唯一的问题是你需要在VS2005中编辑这些文件。
答案 2 :(得分:4)
关于它的用法。
关于执行并没有坏,因为已经提到它只是语法糖并且在编译时被替换。
编码时,我认为它的使用是混合的。例如:
我觉得这没关系。很容易看出价值是什么
var a = "test";
不太好,许多人不得不在IDE中滚动才能真正理解代码,这很痛苦。
var b = SomeReallyLongNameSpace.SubNamespace.Namespace.Class.Enum.Value1;
这很好,你知道结果是什么,因为一个明确定义的方法。
var c = GetString();
你一眼就知道返回了什么,这没有用,而且更好地定义而不是使用var关键字。
var d = GetSomething();
答案 3 :(得分:1)
关于var:它是纯语法糖和编译技巧。输入var你要求编译器根据表达式的右侧猜测类型。这可以很容易地编译成.net 2.0。 Linq可能无法工作,因为它使用.net 3.5
中的程序集答案 4 :(得分:-2)
var来保存C#3.0中的匿名类型的实例。
在.net2.0中可能是VS2008或C#编译器必须用在设计时已知的实际类型替换它,如果您在编码时已经知道了类型,为什么要使用var! :)