为什么要使用var而不是类名?

14

可能重复的问题:
var关键字有什么作用?
在C#中,使用var有哪些优势?

我总是看到其他人写出这样的代码:

var smtp = new SmtpClient();

但为什么在这种情况下要使用var而不是SmtpClient?我总是使用

SmtpClient smtp = new SmtpClient();

var是否更有效率?为什么要使用var而不是实际的变量类型?我是不是遗漏了什么?


@MattBall 哈哈,那也是个重复的。 - Liam McInroy
4个回答

31

想象一下。

Dictionary<Dictionary<String, String>, String> items = new Dictionary<Dictionary<String, String>, String>();

var对于这样的事情非常有用。

var items = new Dictionary<Dictionary<String, String>, String>();

简单得多了。 var 的作用与 C++ 11 中的 auto 相同,编译器知道类型,为什么我们要这么反复重复呢?我个人很少使用 var,但只用于长度声明。它只是语法糖。


我肯定会更经常地开始使用。 - Liam McInroy

21

不,这不是关于效率的问题,而只是关于代码编写风格的问题。

考虑到这是一种风格,这个规则并不能总是应用。

想象以下这段代码:

var myVar = Some3dPartFunction()myVar的类型是什么?从代码风格的角度来看,这不是非常清晰和好的写法。

简而言之,要以聪明的方式选择适当的编写方式。


3
如果你无法从函数名称中推断出其返回的内容,那么这个函数名称就不好。 - Matěj Zábský
2
@MatějZábský:在理想的世界里,我会同意你的看法,但是在真实的办公室编码中,我总是遇到糟糕的命名函数、变量,没有注释的代码,没有经过测试的代码等等。你不能设计一个框架来适应完美世界的需求。 - Tigran
@Tigran 当然,我也会在某些情况下使用特定类型声明,因为var可能不够清晰,但总体而言,我更喜欢var。你得到了我的支持。 - Matěj Zábský

5

不,使用var并不会更加高效。实际上,显式地声明变量类型是良好的编程习惯,比使用var更易读。

因此:

var smtp = new SmtpClient();

并且:

SmtpClient smtp = new SmtpClient();

这两种不同的写法是指相同的事情。


3

这是一种语法糖:

var smtp = new SmtpClient(); 

等于:

SmtpClient smtp = new SmtpClient();

这是C# 3.0中的一个新功能,称为类型推断。


说得对。这只是写作风格的不同而已。为了代码的清晰易读性,建议使用第一个。 - Karan Prince

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接