当类型已知时,是否有任何技术原因使用或不使用C#中的var?

Edw*_*uay 11 c# var conventions

似乎越来越多我读过的C#代码使用var类型标识符:

foreach (var itemChange in ItemChanges)
{
   //... 
}
Run Code Online (Sandbox Code Playgroud)

而不是明确说明类型:

foreach (ItemChange itemChange in ItemChanges)
{
   //... 
}
Run Code Online (Sandbox Code Playgroud)

即使知道类型.

我仍在使用后一个显式版本,因为我认为稍后阅读它会更快地了解变量的类型,而不是使用var.

但是否有任何技术理由使用其中一种?

Ada*_*lph 21

没有技术原因.如果在编译时无法推断出类型,那么代码将无法编译.

您说得对,有些情况可能更好地使用显式类型进行可读性,例如

var obj = SomeMethod(); // what's the type? you'd have to inspect SomeMethod()
SomeClass obj = SomeMethod(); // the type is obvious
Run Code Online (Sandbox Code Playgroud)

但是使用var的其他情况很有意义,例如

var obj = new SomeClass(); // the type is obvious
SomeClass obj = new SomeClass(); // the duplication of type is unnecessary
Run Code Online (Sandbox Code Playgroud)

  • 但是(a)只是证明了"SomeMethod"的命名很糟糕,而不是类型信息是有用的,(b)为什么你还要关心具体的类型呢?我看到`var`辩论的很多答案,它假设具体的类型信息有助于提高可读性而不引用任何证据证明它是如此.动态和函数语言的用户倾向于强烈反对内联类型信息是好事的断言. (4认同)

Jor*_*oba 12

不,只是可读性.

  • 我喜欢这个答案.简短又甜蜜. (2认同)