4 回答
TA贡献2012条经验 获得超12个赞
var
var orders = cust.Orders;
IEnumerable<Order>
, ObservableCollection<Order>
BindingList<Order>
ObservableCollection<Order> orders = cust.Orders;
ObservableCollection<Order>
IList<Order>
TA贡献2003条经验 获得超2个赞
我用var
广泛地。有人批评说,这会降低代码的可读性,但没有理由支持这种说法。
诚然,这可能意味着不清楚我们正在处理的是哪种类型的问题。那又怎么样?这实际上是解耦设计的要点。在处理接口时,您强调的是不对变量的类型感兴趣。var
更进一步,没错,但我认为从可读性的角度来看,这个论点是一样的:程序员实际上不应该对变量的类型感兴趣,而应该对变量的类型感兴趣。是吗?。这就是为什么微软也称类型推断为“鸭子输入”。
所以,当我使用var
?很简单,不管IntelliSense告诉我什么都行。任何忽略IDE的关于C#的推理都不符合现实。实际上,每个C#代码都是在支持IntelliSense的IDE中编写的。
如果我使用的是var
声明变量并混淆变量的存在,我的代码有一些根本问题。var
不是病因,它只会使症状明显。别怪信使。
现在,C#团队发布了一份编码指南,声明var
应只用于捕获创建匿名类型的LINQ语句的结果(因为在这里,除了var
)。去他的吧。只要C#团队没有给我一个合理的理由来支持这个准则,我就会忽略它,因为在我的职业和个人看来,这纯粹是胡说八道。(对不起,我没有相关指南的链接。)
实际上,有一些(表面上)好解释为什么你不应该用var
但我仍然认为他们在很大程度上是错误的。以“searchabililty”为例:作者声称var
很难找到MyType
被利用了。右(边),正确的。接口也是如此。实际上,我为什么要知道这个类是在哪里使用的呢?我可能更感兴趣的是它在哪里被实例化,这仍然是可搜索的,因为在某个地方必须调用它的构造函数(即使这是间接的,类型名称也必须在某个地方被提及)。
TA贡献1853条经验 获得超18个赞
List<T>
IEnumerable<T>
TA贡献1842条经验 获得超12个赞
var
var
这种类型是匿名的(嗯,你在这里别无选择,因为它 必
在这种情况下是可变的) 根据指定的表达式(即 var foo = new TypeWithAReallyLongNameTheresNoSenseRepeating()
)
var
- 4 回答
- 0 关注
- 575 浏览
添加回答
举报