在与同事讨论了在C#3中使用'var'关键字后,我想知道人们对通过var的类型推断的适当用途有什么看法?
例如,我在可疑情况下懒得使用var,例如: -
foreach(var item in someList) { // ... } // Type of 'item' not clear.
var something = someObject.SomeProperty; // Type of 'something' not clear.
var something = someMethod(); // Type of 'something' not clear.
Run Code Online (Sandbox Code Playgroud)
var的更合理用途如下: -
var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
Run Code Online (Sandbox Code Playgroud)
有趣的是LINQ似乎有点灰色,例如: -
var results = from r in dataContext.SomeTable
select r; // Not *entirely clear* what results will be …Run Code Online (Sandbox Code Playgroud) 前几天我和同事聊天,听说他们的编码标准明确禁止他们var在C#中使用关键字.他们不知道为什么会如此,我总是发现隐式声明在编码时非常有用.我从来没有遇到任何问题,找出变量是什么类型(你只是将鼠标悬停在VS中的变量上,你会得到那种方式).
有谁知道为什么在C#中使用var关键字是个坏主意?
似乎越来越多我读过的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.
但是否有任何技术理由使用其中一种?
最近我看到一个人大量使用var和default关键字来声明变量(以及每个声明),如下所示:
var employee = default(Employee); //Employee is a class
var errorInfo = default(ErrorInfo); //ErrorInfo is struct; Blank is default value
var salary = default(Double);
var isManager = default(Boolean?);
Run Code Online (Sandbox Code Playgroud)
而不是使用:
Employee employee = null; //Employee is a class
ErrorInfo errorInfo = Blank; //ErrorInfo is struct; Blank is default value
Double salary = 0.0;
Boolean? isManager = null;
Run Code Online (Sandbox Code Playgroud)
或者,而不是使用偶数:
Employee employee; //Employee is a class
ErrorInfo errorInfo; //ErrorInfo is struct; Blank is default value
Double salary;
Boolean? isManager;
Run Code Online (Sandbox Code Playgroud)
现在使用var和default来声明每个变量 …