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

时间:2011-02-01 22:04:13

标签: c# .net coding-style resharper var

  

可能重复:
  ReSharper and var

在我安装ReSharper后,它要求(通过警告)尽可能使用var,例如

UnhandledExceptionEventArgs ue = (UnhandledExceptionEventArgs) t;

ReSharper想把它变成

var ue = (UnhandledExceptionEventArgs) t;

我更喜欢第一个版本,是否有理由更喜欢 var ?更好的性能?什么?或者它只是一种代码风格?

4 个答案:

答案 0 :(得分:99)

这真的只是一种编码风格。编译器为两个变体生成完全相同的内容。

另见此处的性能问题:

答案 1 :(得分:34)

当你说“通过警告”时,你究竟是什么意思?我经常看到它提示你可能想要使用var,但没有像警告一样严厉。

与var没有性能差异 - 代码被编译为相同的IL。潜在的好处在于可读性 - 如果你已经在赋值的RHS中明确了变量晶体的类型(例如通过强制转换或构造函数调用),那么在LHS上获得它的好处是什么?这是个人偏好。

如果您不希望R#建议使用var,只需更改选项即可。关于ReSharper的一件事:它是非常可配置的:)

答案 2 :(得分:14)

正如其他人所说,使用以下任何一种方法时,编译代码(IL)没有区别:

var x1 = new object();
object x2 = new object;

我想Resharper警告你,因为[在我看来]第一个例子比第二个例子更容易阅读。此外,需要两次重复该类型的名称是什么?

考虑以下因素,你会得到我的意思:

KeyValuePair<string, KeyValuePair<string, int>> y1 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5));

这样更容易阅读:

var y2 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5));

答案 3 :(得分:13)

这种情况下它只是编码风格。

只有在处理匿名类型时才需要使用var 在其他情况下,这是一个品味问题。