我是否应该总是在C#3.0中支持隐式类型的局部变量?

时间:2020-03-05 18:40:55  来源:igfitidea点击:

Resharper当然是这么认为的,开箱即用会让我们转换

Dooberry dooberry = new Dooberry();

var dooberry = new Dooberry();

那真的被认为是最好的风格吗?

解决方案

回答

我感觉这将是随着时间的推移在Stack Overflow上最受欢迎的问题之一。它归结为偏好。我们认为更可读的内容。我更喜欢在右侧定义类型时使用var,因为它更简洁。从方法调用分配变量时,我使用显式类型声明。

回答

当然,这是样式问题,但是我同意Dare:C3.0隐式类型声明:是var还是不var?。我认为使用var代替显式类型会使代码的可读性降低。在以下代码中:

var result = GetUserID();

结果如何?一个int,一个字符串,一个GUID?是的,这很重要,而且不,我不必挖掘代码即可知道。在代码示例中尤其令人讨厌。

杰夫就此发表了一篇文章,说他赞成var。但是那个家伙疯了!

我看到了stackoverflow成功的一种模式:挖掘旧的CodingHorror帖子,并(用Jeopardy风格)用问题表达他们的意思。

回答

"最佳样式"是主观的,并随上下文而变化。

有时,使用'var'而不是键入一些非常长的类名会更容易,或者如果我们不确定给定函数的返回类型,则更容易。我发现在处理Linq或者for循环声明时,我更多地使用'var'。

在其他时候,使用完整的类名会更有帮助,因为它比'var'更好地记录了代码。

我觉得应该由开发者来决定。没有银弹。没有"一个真正的方法"。

干杯!

回答

并非总是如此,但我会说很多次。类型声明没有比匈牙利符号有用的多了。我们仍然遇到相同的问题,即类型可能会发生变化,而重构工具则有很多帮助,因为与仅在单个位置(除非重复)之后不必更改类型的位置相比,它不理想,这与理想情况相比是不理想的。原则。

可以为变量及其值指定类型名称的任何单行语句都应绝对使用var,尤其是当它是长的Generic <OtherGeneric <T,U,V>,Dictionary <X,Y >>>时

回答

@ Coding Horror对此进行了很好的讨论

我个人试图将其使用量降到最低,我发现它会损害可读性,尤其是在从方法调用中分配变量时。

回答

@jongalloway var不一定会使代码更不可读。

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

第一个与第二个一样可读,并且需要较少的工作

var myvariable = ResultFromMethod();

在这里,我们有一点要说,var可能会使代码的可读性降低。我喜欢var,因为如果我将小数更改为双精度数,则不必在很多地方进行更改(也不必说重构,有时我会忘记,只需让我var!)

编辑:我只读了一篇文章。哈哈。

回答

ReSharper之类的工具的优点之一是,我们可以按自己的喜好编写代码,然后将其重新格式化为更可维护的格式。我让Rset始终重新格式化,以使使用中的实际类型可见,但是,在编写代码时,我几乎总是键入'var'。

好的工具可以让我们两全其美。

约翰。

回答

关于这个主题,有一篇非常不错的MSDN文章,它概述了一些我们不能使用var的情况:

以下限制适用于隐式类型的变量声明:

var can only be used when a local variable is declared and initialized
  in the same statement; the variable
  cannot be initialized to null, or to a
  method group or an anonymous function.
  var cannot be used on fields at class scope.
  Variables declared by using var cannot be used in the initialization
  expression. In other words, this
  expression is legal: int i = (i = 20);
  but this expression produces a
  compile-time error: var i = (i = 20);
  Multiple implicitly-typed variables cannot be initialized in the same
  statement.
  If a type named var is in scope, then the var keyword will resolve to
  that type name and will not be treated
  as part of an implicitly typed local
  variable declaration.

我建议我们进行检查,以了解在代码中使用var的全部含义。

回答

仅在明显是什么是var时,才使用它。

对我清楚:

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

我不清楚:

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

回答

I'm seeing a pattern for stackoverflow
  success: dig up old CodingHorror posts
  and (Jeopardy style) phrase them in
  terms of a question.

我恳求无辜!但是你是对的,这似乎是一个相对受欢迎的小问题。

回答

我所看到的答案的最佳摘要是Eric Lippert的评论,该评论基本上说,如果重要的是什么类型,则应使用具体的类型,否则不要使用。本质上,类型信息应该保留给类型重要的地方。

我公司的标准是在所有地方都使用var,这是我们在阅读了各种建议之后发现的,然后花一些时间尝试一下,以查看缺少带注释的类型信息是帮助还是阻碍。我们觉得这是有帮助的。

人们链接到的大多数建议(例如Dare的建议)都是从未尝试使用var而不是具体类型进行编码的人提出的建议。这使得这些建议几乎一文不值,因为它们不是凭经验说的,而是在推断。

我能给最好建议是亲自尝试一下,看看对我们和团队有用。

回答

仅当我们事先不知道类型时,才有意义。