【问题标题】:Using list<type> or var keyword difference [duplicate]使用 list<type> 或 var 关键字差异 [重复]
【发布时间】:2012-10-08 04:06:14
【问题描述】:

可能重复:
C# ‘var’ vs specific type performance

当我写下面的代码时:

List<string> list = new List<string>();  

resharper 想把它转换成

var list = new List<string>();          

为什么?有什么区别? 是不是更容易理解?我认为不会。

使用 var 在 RAM 上的成本高于其他成本。不是吗?

【问题讨论】:

  • var 被编译成List&lt;string&gt;,因此它不会施加任何运行时惩罚。
  • 没有区别。它们都被编译成同一个东西。我个人觉得var 更具可读性,但仅此而已。
  • 您不必遵循建议,您可以将其设置为显示为提示。
  • 完全一样。 var 只是变量显式类型的“语法糖”。

标签: c# resharper var


【解决方案1】:

它们是一样的。 var 是隐式类型的。

如果您将鼠标悬停在 Visual Studio 中的关键字 var 上,它将向您显示对象的类型 - 在本例中为 List&lt;string&gt;。使用var 只是为了清理代码——你已经知道你正在创建一个List&lt;string&gt; 类型的对象,所以有些人认为键入是多余的:

List<string> list = new List<string>();

没有性能差异,因为编译器已经知道对象是什么类型。主要使用 var 个人偏好 - 如果您愿意,可以使用它并且不会影响性能。

Eric Lippert 有一篇关于 var here 的精彩博文。

我认为您混淆了vardynamic,这是两个完全不同的东西。 dynamic 类型是一种允许您在运行时为其分配不同类型值的类型。

【讨论】:

    【解决方案2】:

    完全没有区别。唯一值得注意的是var 关键字不会创建动态对象。它仍然是一个强类型对象,但是编译器可以从变量声明语句的右操作数推断出类型。

    【讨论】:

      【解决方案3】:
      var list = new List<int>();
      

      编译器使用右手的返回类型来确定列表的类型。在这种情况下List&lt;string&gt;。所以没有区别。只是更短的初始化变量的方法。

      请注意,声明字段时不能使用 var。

      【讨论】:

        【解决方案4】:

        这背后的原因是,如果你使用 'var' 会更容易重构。例如,如果您从方法返回类型“Foo”,然后将其转换为返回接口,则无需更改任何客户端代码 - 新类型将被推断并正确使用。

        【讨论】:

          猜你喜欢
          • 2013-04-19
          • 2010-11-15
          • 2015-11-12
          • 2013-09-04
          • 2011-04-03
          • 1970-01-01
          • 2011-09-30
          • 2011-04-11
          • 2010-11-11
          相关资源
          最近更新 更多