170

可能重复:
ReSharper 和 var

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

UnhandledExceptionEventArgs ue = (UnhandledExceptionEventArgs) t;

ReSharper 想把它变成

var ue = (UnhandledExceptionEventArgs) t;

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

4

4 回答 4

115

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

有关性能问题,另请参见此处:

于 2011-02-01T22:06:18.820 回答
38

当您说“通过警告”时,您到底是什么意思?我通常看到它暗示您可能想要使用 var,但没有像警告那样苛刻。

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

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

于 2011-02-01T22:07:21.857 回答
18

正如其他人所说,当您使用以下任何一种时,编译代码(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));
于 2011-02-01T22:15:57.343 回答
14

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

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

于 2011-02-01T22:15:00.973 回答