当我写下代码时:
List<string> list = new List<string>();
resharper希望将其转换为
var list = new List<string>();
为什么呢?有什么不同? 它更容易理解吗?我想不是。
使用var
比RAM上的其他成本更高。不是吗?
答案 0 :(得分:7)
他们是一样的。隐式输入var
。
如果将鼠标悬停在Visual Studio中的关键字var
上,它会显示您对象的类型 - 在本例中为List<string>
。使用var
只是为了清理代码 - 你已经知道你正在创建一个List<string>
类型的对象,所以有些人认为输入是多余的:
List<string> list = new List<string>();
没有性能差异,因为编译器已经知道对象是什么类型。主要使用var个人偏好 - 如果你愿意,可以使用它,并且没有性能损失。
Eric Lippert撰写了一篇关于var
here的精彩博文。
我认为你让var
和dynamic
感到困惑,这是两件完全不同的事情。 dynamic
类型是一种允许您在运行时为其分配不同类型值的类型。
答案 1 :(得分:3)
var list = new List<int>();
编译器使用右手的返回类型来确定列表的类型。在这种情况下List<string>
。所以没有区别。只是缩短变量初始化的方法。
请注意,在声明字段时不能使用var。
答案 2 :(得分:1)
完全没有区别。唯一值得注意的是var
关键字不会创建动态对象。它仍然是一个强类型对象,但编译器可以从变量声明语句的右操作数推断出类型。
答案 3 :(得分:0)
这背后的原因是,如果使用'var',重构会更容易。例如,如果从方法返回类型“Foo”然后将其转换为返回接口,则不必更改任何客户端代码 - 新类型将被推断并正确使用。