Resharper当然是这么认为的,开箱即用它会唠叨你转换
Dooberry dooberry = new Dooberry();
到
var dooberry = new Dooberry();
这真的被认为是最好的风格吗?
答案 0 :(得分:36)
这当然是一种风格问题,但我同意Dare:C# 3.0 Implicit Type Declarations: To var or not to var?。我认为使用var而不是显式类型会使代码的可读性降低。在以下代码中:
var result = GetUserID();
结果如何?一个int,一个字符串,一个GUID?是的,这很重要,不,我不应该通过代码来了解。它在代码示例中特别烦人。
杰夫写了一篇关于此的帖子,说he favors var。但那家伙很疯狂!
我看到了stackoverflow成功的模式:挖出旧的CodingHorror帖子和(Jeopardy风格)用问题来表达它们。
答案 1 :(得分:11)
我只在明显知道var是什么时使用它。
对我说清楚:
XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];
我不清楚:
var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];
答案 2 :(得分:9)
我看到的答案的最佳摘要是Eric Lippert's comment,基本上说如果重要的是类型是什么,你应该使用具体类型,但不是以其他方式。基本上类型信息应该保留在类型很重要的地方。
我公司的标准是在任何地方使用var,我们在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而不是具体类型进行编码的人提出的建议。这使得建议几乎毫无价值,因为它们不是根据经验说话,而是仅仅是推断。
我能给你的最好建议是亲自尝试,看看哪些对你和你的团队有用。
答案 3 :(得分:4)
@jongalloway - var不一定会使您的代码更难以理解。
var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;
第一个与第二个一样可读,并且需要的工作量更少
var myvariable = ResultFromMethod();
在这里,你有一个观点,var可能会使代码的可读性降低。我喜欢var,因为如果我将小数改为double,我不必在一堆地方改变它(并且不要说重构,有时我会忘记,只是让我变量!)
编辑:刚刚阅读文章,我同意。洛尔。
答案 4 :(得分:2)
我有一种感觉,这将成为Stack Overflow上随着时间推移最受欢迎的问题之一。它归结为偏好。无论你怎么想都更具可读性。当在右侧定义类型时,我更喜欢var,因为它更简洁。当我从方法调用中分配变量时,我使用显式类型声明。
答案 5 :(得分:2)
对这个@ Coding Horror
进行了很好的讨论我个人尝试将其使用保持在最低限度,我发现它会损害可读性,尤其是在从方法调用中分配变量时。
答案 6 :(得分:1)
像ReSharper这样的工具的一个优点是,您可以根据自己的喜好编写代码,然后将其重新格式化为更易于维护的内容。我将R#设置为始终重新格式化,以便使用的实际类型是可见的,但是,在编写代码时,我几乎总是键入'var'。
好的工具让你拥有两全其美。
约翰。
答案 7 :(得分:1)
只有事先不知道类型才有意义。
答案 8 :(得分:1)
在 C# 9.0
中有一种通过 Target-typed new expressions 初始化类的新方法。
你可以这样初始化类:
Dooberry dooberry = new();
就我个人而言,与使用 var
相比,我更喜欢它,而且它对我来说更具可读性。
关于调用方法,我认为这取决于您。就个人而言,我更喜欢指定类型,因为我认为这样更易读:
Dooberry dooberry = GetDooberry();
在某些情况下,很清楚类型是什么,在这种情况下,我使用var:
var now = DateTime.Now;
答案 9 :(得分:0)
“最佳风格”是主观的,取决于具体情况。
有时使用“var”更容易,而不是输入一些非常长的类名,或者如果你不确定给定函数的返回类型。我发现在使用Linq时,或者在循环声明中使用'var'更多。
其他时候,使用完整的类名更有帮助,因为它比'var'更好地记录代码。
我觉得由开发人员做出决定。没有银弹。没有“一个真正的方式”。
干杯!
答案 10 :(得分:0)
不是总是,但我会说很多时间。类型声明并不比匈牙利表示法更有用。你仍然有同样的问题,类型可能会发生变化,并且重构工具是有用的,与不必更改指定类型的位置相比,它不是理想的,除了在一个地方,不遵循不要重复你自己原理
任何可以为变量及其值指定类型名称的单行语句都应该使用var,特别是当它是一个很长的Generic< OtherGeneric< T,U,V>,词典< X,Y>>>
答案 11 :(得分:0)
这个主题有一个really good MSDN article,它概述了一些你不能使用var的情况:
以下限制适用于隐式类型变量声明:
- var只能在声明和初始化局部变量时使用 在同一声明中;变量 无法初始化为null或a 方法组或匿名函数。
- var不能用于类范围的字段。
- 使用var声明的变量不能在初始化中使用 表达。换句话说,这个 表达式是合法的:int i =(i = 20); 但这个表达产生了一个 编译时错误:var i =(i = 20);
- 多个隐式类型变量不能在同一个中初始化 言。
- 如果名为var的类型在范围内,则var关键字将解析为 该类型名称,不会被处理 作为隐式键入的本地的一部分 变量声明。
我建议您查看它以了解在代码中使用var的全部含义。
答案 12 :(得分:0)
我看到了stackoverflow的模式 成功:挖掘旧的CodingHorror帖子 和(危险的风格)短语他们 问题的条款。
我恳求无辜!但你是对的,这似乎是一个相对受欢迎的小问题。