【发布时间】:2012-04-04 19:03:09
【问题描述】:
在与同事讨论 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.
更合法的var用法如下:-
var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
有趣的是 LINQ 似乎有点灰色地带,例如:-
var results = from r in dataContext.SomeTable
select r; // Not *entirely clear* what results will be here.
很明显,它将是一个实现 IEnumerable 的类型,但它并不像 var 声明一个新对象那样完全明显。
当涉及到 LINQ to 对象时,情况就更糟了,例如:-
var results = from item in someList
where item != 3
select item;
这并不比 equivilent foreach(var item in someList) { // ... } 等效。
这里确实存在类型安全问题 - 例如,如果我们将该查询的结果放入接受 IEnumerable<int> 和 IEnumerable<double> 的重载方法中,调用者可能会无意中传入错误的类型。
【问题讨论】:
-
使用 var
you don't have to figure out the type似乎是一个非常糟糕的使用理由......你应该知道类型是什么,var 只是避免输入它的快捷方式 -
您是否只是从@Henrik 的重复评论中复制了问题?
-
@Bali C:是的,如果你看看他之前的问题,你会发现一个相当令人不安的模式......
-
@BoltClock 如果他们正在做奇怪的事情,比如复制其他问题等,是否有标记用户而不是评论的方法?只是好奇
-
@Burkely91:标记他们的任何帖子。