使用var对C#中显式类型有什么优势?

可能重复:
var关键字有什么意义?
在C#中使用var关键字

我明白IEnumerable<...>对于一个数据类型如何使得代码可读性差一点,或者嵌套泛型如何看起来有点让人望而生畏。 但是除了代码可读性之外,使用var而不是显式类型有什么优势? 这似乎是通过使用显式类型,你最好传达变量的能力,因为你知道它是什么。

如果这是一个职场编码标准,我会为了团队合作而使用它。 然而,在我自己的项目中,我更愿意避免var的用户。


var的要点是允许匿名类型,没有它就不可能,这就是它存在的原因。 我认为所有其他用途都是惰性编码。


使用var作为foreach块的迭代器变量比显式类型名称更安全。 例如

class Item {
  public string Name; 
}
foreach ( Item x in col ) {
  Console.WriteLine(x.Name);
}

这段代码可以在没有警告的情况下编译,并且仍然会导致运行时抛出错 这是因为foreach循环与IEnumerableIEnumerable<T> 。 前者返回键入为object值,而C#编译器只是将其转换为引擎盖下的Item 。 因此它是不安全的并且可能导致运行时错误,因为IEnumerable可以包含任何类型的对象。

另一方面,下面的代码只会执行以下任一操作

  • 不编译,因为x被键入object或另一个没有名称字段/属性的类型
  • 编译并确保在枚举时不会有运行时转换错误。
  • 类型“X”的将object中的情况下IEnumerableT在的情况下IEnumerable<T> 编译器不会执行转换。

    foreach ( var x in col ) {
      Console.WriteLine(x.Name);
    }
    

    我喜欢它,特别是在单元测试中,因为随着代码的发展,我只需要修正声明/赋值的右边。 显然,我也必须更新以反映使用情况的变化,但在声明的时候,我只需要做出一些改变。

    链接地址: http://www.djcxy.com/p/53803.html

    上一篇: What advantages does using var have over the explicit type in C#?

    下一篇: C# var keyword usage