C#中var关键字的用法

15
我是一名有用的助手,可以为您翻译文本。以下是需要翻译的内容:

可能的重复:
使用什么:var还是对象名称类型?
C#中var关键字的用法
var关键字的意义是什么?
在C# 3.0中我应该总是倾向于使用隐式类型的局部变量吗?

我刚刚安装了ReSharper的试用版来评估它是否适合我们公司。我注意到它建议我更改以下内容(虚构的示例):

string s = "";

为了

var s = "";

在声明变量时,使用var关键字是否比使用Object类型更好?它有什么优势?为了更好地理解,我是一名从Java转到.Net的开发者。


1
我认为这个回答可以解决你的问题:https://dev59.com/WXVD5IYBdhLWcg3wU5-H - Sam Saffron
2
重复问题:https://dev59.com/U3VC5IYBdhLWcg3wsTfv 和 https://dev59.com/QHVC5IYBdhLWcg3wnCj6 - Noldorin
1
这仍然是一个好问题,就像前几次提问时一样... - Unsliced
1
@Unsliced:对我来说,问题归结为:“如果在5年内有15个副本的问题,并且答案的深度各不相同,那么对于寻找最佳答案的人来说,这是更好还是更糟糕的?” - Ruben Bartelink
微软确实对var提供了一些指导。请参阅https://msdn.microsoft.com/en-us/library/bb384061.aspx和https://msdn.microsoft.com/en-us/library/ff926074.aspx中的隐式类型本地变量部分。 - JamieSee
显示剩余3条评论
5个回答

35

我认为在代码更易读的情况下使用var是可以接受的,对我来说,这意味着var替换的类型必须是完全明显的。

例如,这将是var的一个很好的用法(人为的例子):

var thing = new Dictionary<int, KeyValuePair<string, int>>();

然而,这将是对var的不良使用:

var thing = GetThingFromDatabase();

重构一下怎么样:例如,GetThingFromDatabase返回“Thing”对象,因此您编写: Thing thing = GetThingFromDatabase(); 而不是var thing... 过了一段时间,您决定将Thing对象转换为接口,并且必须在所有地方将Thing更改为IThing)恭喜!我想看看您如何实现当GetThingFromDatabase返回一些令人惊叹的linq时的情况;) - Serhii Kuzmychov

12

对于类型声明非常长的情况,我发现使用这种方式很有帮助,例如:

Dictionary<int, string> item = new Dictionary<int, string>();

变成

var item = new Dictionary<int, string>();

8

使用var关键字和显式指定变量类型在编译时推断变量类型是等效的。在大多数情况下,我更喜欢显式指定变量类型而不是使用var,所以我会更改我的resharper设置。


2
-1:提问者想知道如何决定选择哪种方式,并希望了解基础知识。 - Ruben Bartelink
我不认为我的回答是无用的,值得被踩。 - Charlie
好的,取消了踩的操作 - 似乎其他人也持有类似的观点(或者他们是在反驳我的“恶意”?我当时给它打了一个-1来抵消单个+1 -- 我认为那些没有太多帮助的答案并不会毁天灭地,只要它们保持在零,并且不会潜在地使得获取真正有见地的答案变得更加耗时。换句话说,这就是为什么https://dev59.com/bHM_5IYBdhLWcg3w2W9g#1205396有我的+1和其他人的+1的原因。 - Ruben Bartelink
个人而言,我只会对错误或误导性的答案进行投票,但这取决于你。问题本身就是关于最佳实践的,所以答案会有主观性。我说过,大多数情况下我更喜欢显式类型变量。正如codespeaker所说,当类型声明很长时,使用var可能会使代码看起来更整洁,提高可读性。 - Charlie
我想说的是,在一个关于“最佳实践”的问题上,答案真的是“取决于情况”,只说是或不是是不够的——需要说“我总是选择是/否因为......[,虽然我知道有些人会说......——但我不同意,因为......”。在这个背景下,ReSharper设置确实是一个独特而有用的观点......经过成熟反思,我会改变立场,给予肯定评价! - Ruben Bartelink

1

据我记得,Resharper只是说可以这样写,而不是说你应该这样写。

很多建议只是建议,第一次看到它们时我就关闭了。这就是其中之一。

另一个建议是说写“this.someProperty”是多余的,而我认为这样做可以使代码更易读。


0

Resharper还有建议将if语句转换为true或not true的选项。 几乎是相同的事情,但这取决于您的编码风格。 因此,当您发现使用var更舒适时,请使用此建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接