我何时应该使用"var"而不是"object"?

Yoc*_*mer 4 c# syntax var

我想知道你var什么时候应该使用?

C#中的几乎任何东西,除了可能是原语和一些更奇怪的情况,都来自Object.

那么使用那些实际类型不是更好的做法吗?或者至少object

(我已经编程了一段时间,我的严格观点是那var是邪恶的)

Kon*_*lph 29

你误解了:var不是一种类型.var指示编译器根据其初始化使用正确的变量类型.

例:

var s = "hello";         // s is of type string
var i = 42;              // i is of type int
var x = new [] { 43.3 }; // x is of type double[]
var y = new Foo();       // y is of type Foo
Run Code Online (Sandbox Code Playgroud)

使用时,您的变量仍然是强类型的var.

因此,var不是"邪恶的".相反,它非常方便,正如我在其他地方所说的那样,我广泛使用它.Eric Lippert是C#背后的主要人物之一,他还详细描述了是否var是不好的做法.简而言之,"不".

  • @Tom我们有多个关于此的主题.用法极具争议但我并不真正理解这个问题.我几乎到处都使用它,除非(非常罕见!)可读性会受到影响. (3认同)
  • @Yochai:那就这样写吧.在这种情况下,如果指定类型,则更清楚.但是当人们开始使用"不良做法"这个术语时,我会感到不安.这意味着只有"一种正确的方法"来做事,而且很少有. (3认同)

Jus*_*gan 9

你混为一谈vardynamic,我想.使用var完全一样的*,如果你写了整个类型名称,编译器使得他们进入相同的代码.Eric Lippert的博客提供了一些关于var关键字的作用以及何时使用它的优秀信息.

来自Eric Lippert的文章使用和误用隐式类型:

总结一下,我的建议是:

  • 必要时使用var; 当您使用匿名类型时.
  • 当初始值设定项中的声明类型很明显时,请使用var,尤其是在创建对象时.这消除了冗余.
  • 如果代码强调变量的语义"业务目的"并忽略其存储的"机械"细节,请考虑使用var.
  • 如果需要这样做以正确理解和维护代码,请使用显式类型.
  • 无论您是否使用"var",都使用描述性变量名称.变量名称应表示变量的语义,而不是其存储的详细信息; "decimalRate"很糟糕; "interestRate"很好.

*有些人可能对我的"完全相同"声明有疑问.对于匿名类型来说并不严格,但这是因为您无法合法地写出类型名称.


Cod*_*aos 5

使用object你将丢失所有静态类型信息(当在值类型上使用它甚至导致拳击).所以使用object与使用非常不同var.

var另一方面,相当于使用实际(静态)类型.因此,在说明实际类型不可能或不方便时,请使用它.

  • var必要的一种情况是使用匿名类型.它们没有名称(nitpick:只有您不知道的编译器生成的名称),因此您无法明确命名该类型.

  • var使用方便的一种情况是当你的typename非常长时.有时在使用嵌套泛型时会发生这种情况.

  • foreach循环中,您可以避免不安全的隐式转换.