在C#2.0中使用关键字var bad?

我读了一篇关于在C#2中使用C#3function的文章,例如你可以输入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代码之间有什么区别吗?

我担心你混淆了C#版本和.NET版本。

你不能在C#2.0中使用var ,编译器会认为它只是一个标识符。 但是你可以在面向.NET 2.0的C#3.0中使用它,因为var只是一种语言(C#)构造,而不是.NET构造。 .NET编译器会将其转换为生成的CIL中的相应类型,因此JIT编译器永远不会看到它,您将完全没问题。

由于VS2008编译器是C#3.0编译器,因此无论您使用的是哪个.NET版本,都可以使用var

var是VS2008使用的C#3语言中的合成糖。 代码仍然可以编译为.net 2.0兼容。 您应该拥有的唯一问题是您是否需要在VS2005中编辑这些文件。

关于它的用法。

它在执行方面也不错,如前所述,它只是语法糖并在编译时被替换。

在编码时,我认为它的使用是混合的。 例如:

我觉得这没关系。 很容易看出它的价值

 var a = "test"; 

不太好,许多人不得不在IDE中滚动才能真正理解代码,这很痛苦。

 var b = SomeReallyLongNameSpace.SubNamespace.Namespace.Class.Enum.Value1; 

这很好,你知道结果是什么,因为一个明确定义的方法。

 var c = GetString(); 

你根本不知道返回什么,这没有帮助,而且更好地定义而不是使用var关键字。

 var d = GetSomething(); 

关于var:它是纯语法糖和编译技巧。 输入var你要求编译器根据表达式的右侧猜测类型。 这可以很容易地编译成.net 2.0。 Linq可能不起作用,因为它使用.net 3.5中的程序集

引入了var来保存C#3.0中的匿名类型的实例。

在.net2.0中可能是VS2008或C#编译器必须用在设计时已知的实际类型替换它,如果您在编码时已经知道类型,为什么要使用var! 🙂