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

问题描述:

Resharper肯定是这样认为的,进出会唠叨箱子你转换我应该*总是*支持C#3.0中的隐式类型局部变量吗?

Dooberry dooberry = new Dooberry(); 

var dooberry = new Dooberry(); 

是真的认为是最好的风格?

+1

mmmmm ... dooberries ..好吃! – 2008-09-20 17:06:42

这当然是风格的问题,但我同意Dare:C# 3.0 Implicit Type Declarations: To var or not to var?。我认为使用VAR一个明确的类型让你的代码少readable.In下面的代码代替:

var result = GetUserID(); 

是什么结果呢?一个int,一个字符串,一个GUID?是的,这很重要,不,我不应该深入了解代码。这在代码示例中尤其令人讨厌。

杰夫写了这个帖子,说he favors var。但那家伙疯了!

我正在看到一个用于*成功的模式:根据问题挖掘旧的CodingHorror帖子和(Jeopardy风格)短语。

+8

为什么不修改变量的名称而不是抱怨var? var userID = GetUserID(); 如果userID是字符串或int,它并不是非常重要,它是标识用户并且应该被相关函数接受的东西。 – 2008-09-22 06:39:00

我有一种感觉,这将是堆栈溢出问题随着时间的推移最流行的问题之一。它归结为偏好。无论你怎么看都更可读。我更喜欢var,因为它更简洁,因此类型在右侧定义。当我从方法调用分配变量时,我使用显式类型声明。

“最佳风格”是主观的,因环境而异。

有时,使用'var'会比使用一些非常长的类名称或者不确定给定函数的返回类型更容易。我发现我在使用Linq或for循环声明时更多地使用'var'。

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

我觉得这是由开发人员来做出决定。没有银弹。没有“一个真正的方式”。

干杯!

不是不是总是但我会尽可能说很多时间。类型声明并不比匈牙利语更有用。你仍然有同样的问题,即类型可能会发生变化,而重构工具有助于它不是理想的,相比于不需要更改指定类型的地方,除了在一个地方,不要重复自己原理。

其中一个类型的名称可以为变量和它的值都指定的任何单行语句应该肯定使用var,尤其是当它是一个long类型的变量时。 >

有@Coding Horror

个人而言,我尽量保持它的使用到最低限度上这是一个很好的讨论,我发现从分配的方法调用一个变量时,它伤害可读性特别。

@jongalloway - var不一定会让你的代码更难读。

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

首先就是作为第二为可读,并需要更少的工作

var myvariable = ResultFromMethod(); 

在这里,你有一个点,VAR可以使代码的可读性。我喜欢var,因为如果我将小数改为double,我不必在一堆地方去改变它(并且不要说重构,有时我会忘记,只是让我var!)

编辑:刚刚阅读文章,我同意。大声笑。

像ReSharper这样的工具的一个优点是,你可以编写代码,不管你喜欢什么,然后重新格式化为更可维护的东西。我将R#设置为始终重新格式化,以便使用的实际类型可见,但是,在编写代码时,我几乎总是键入'var'。

好工具让你拥有两全其美。

John。

有一个关于该主题的really good MSDN article的,你不能使用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 * success: dig up old CodingHorror posts and (Jeopardy style) phrase them in terms of a question.

我不认罪!但你是对的,这似乎是一个相对普遍的小问题。

我看到的答案的最佳总结是Eric Lippert's comment,基本上说你应该使用具体类型,如果它是重要的类型是什么,但不是。基本上类型信息应该保留给类型重要的地方。

我公司的标准是使用无处不在,我们在reading various recommendation and then spending some time trying it out to see whether the lack of annotated type information was a help or a hindrance后来到。我们觉得这是一个帮助。

人们建议链接的大多数建议(例如Dare的建议)都是由从未尝试使用var代替具体类型编码的人员提出的建议。这使得建议几乎毫无价值,因为他们不是凭经验发言,而只是外推。

我可以给你的最好建议是自己尝试一下,看看你和你的团队有什么作用。

只有在事先不知道类型时才有意义。