jri*_*sta 9 anonymous-types c#-3.0
可能重复:
C#'var'关键字与明确定义的变量
对于仍在观看此事的人,我完全改变了对var的看法.我认为这主要是由于我对这个主题的回应.我现在是一个狂热的'var'用户,我认为它的支持者评论在几乎所有情况下都是绝对正确的.我认为我最喜欢var的是它真的可以减少重复(符合DRY),并使你的代码更加清晰.它支持重构(当你需要更改某些东西的返回类型时,你需要更少的代码清理来处理,并且不,不是每个人都有一个花哨的重构工具!),并且有趣的是,人们似乎并没有真正的问题不知道前面变量的具体类型(它很容易"发现"按需类型的功能,这通常是必要的,即使你知道类型的名称.)
所以这里有一个大的鼓掌的"变种"的关键字!
这是一个相对简单的问题......更多的是民意调查.我是C#的巨大粉丝,自从.NET首次发布之前已经使用了8年多.我喜欢对语言所做的所有改进,包括lambda表达式,扩展方法,LINQ和匿名类型.但是,C#3.0有一个功能我觉得被SORELY误用了......'var'关键字.
自从C#3.0发布以来,在博客,论坛和是,甚至Stackoverflow上,我已经看到var替换了几乎所有已编写的变量!对我来说,这是对该功能的严重滥用,并导致非常随意的代码,由于缺乏变量实际类型的清晰度,因此可能存在许多混淆的错误.
'var'只有一个真正有效的用途(至少在我看来).你问,这有效用途是什么?唯一有效的用途是当您无法知道类型时,以及可能发生这种情况的唯一实例:
访问匿名类型时
匿名类型没有编译时标识,因此var是唯一的选项.这是添加var的唯一原因......支持匿名类型.
那么......你的意见是什么?鉴于var在博客,论坛上的大量使用,由ReSharper等工具建议/强制执行,许多新兴开发人员将其视为完全有效的东西.
我想知道社区的意见.我看到var使用了很多,但我很少知道为什么,并且有一个很好的理由(即简洁/简洁).
Ale*_*lli 25
var是一个很好的想法,帮助实现良好的编程的关键原则:干,即,不要重复自己.
VeryComplicatedType x = new VeryComplicatedType();
Run Code Online (Sandbox Code Playgroud)
是错误的编码,因为它重复VeryComplicatedType,并且效果都是负面的:更冗长和样板代码,更少的可读性,对于读者和代码的编写者来说愚蠢的"makework".正因为如此,var与Java和以前版本的C#相比,我认为C#3中的一个非常有用的增强功能.
当然,通过使用RHS表达类型不明确和明显的表达式(例如,对声明可能很远的方法的调用),它可能会被轻度误用 - 这种滥用可能会降低可读性(强迫读者寻找方法的声明或深入思考其他一些微妙的表达式类型而不是增加它.但如果你坚持使用var以避免重复,你将处于最佳位置,并且不会被误用.
Sam*_*war 24
我认为它应该用于那些类型在同一语句的其他地方明确指定的情况:
Dictionary<string, List<int>> myHashMap = new Dictionary<string, List<int>>();
Run Code Online (Sandbox Code Playgroud)
阅读是一种痛苦.这可以由以下内容取代而不会失去清晰度:
var myHashMap = new Dictionary<string, List<int>>();
Run Code Online (Sandbox Code Playgroud)
突击测验!
这是什么类型的:
var Foo = new string[]{"abc","123","yoda"};
Run Code Online (Sandbox Code Playgroud)
这个怎么样:
var Bar = {"abc","123","yoda"};
Run Code Online (Sandbox Code Playgroud)
我大致不再需要确定那些类型而不是类型的明确冗余规范.作为程序员,我没有让编译器找出对我来说很明显的事情的问题.你可能不同意.
干杯.
永远不要把话说绝了.我很确定有很多问题,人们已经阐述了他们的观点var,但这里再次出现了我的观点.
var是一个工具; 在适当的地方使用它,如果不适合则不要使用它.你是对的,唯一需要的var是在解决匿名类型时,在这种情况下你没有要使用的类型名称.就个人而言,我认为在可读性和懒惰方面必须考虑任何其他用途; 特别是在避免使用繁琐的类型名称时.
var i = 5;
Run Code Online (Sandbox Code Playgroud)
(懒惰)
var list = new List<Customer>();
Run Code Online (Sandbox Code Playgroud)
(方便)
var customers = GetCustomers();
Run Code Online (Sandbox Code Playgroud)
(有疑问;当且仅当GetCustomers()返回IEnumerable时,我认为这是可以接受的)
| 归档时间: |
|
| 查看次数: |
9633 次 |
| 最近记录: |