C# var 关键字用法[重复]

Posted

技术标签:

【中文标题】C# var 关键字用法[重复]【英文标题】:C# var keyword usage [duplicate] 【发布时间】:2010-11-15 08:59:46 【问题描述】:

可能的重复:What to use: var or object name type?Use of var keyword in C#What’s the point of the var keyword?Should I always favour implictly typed local variables in C# 3.0?

我刚刚安装了 ReSharper 的试用版,以便为我的公司评估它。我注意到的一件事是它建议我更改以下内容(虚构示例):

string s = "";

var s = "";

在声明变量时使用 var 关键字而不是使用 Object Type 是最佳实践吗?它有什么好处。就上下文而言,我是一名前 Java 开发人员,刚刚过渡到 .Net 作品。

【问题讨论】:

我认为这回答了你的问题:***.com/questions/17032/… 重复:***.com/questions/209199/… 和 ***.com/questions/236878/… ***.com/questions/41479/use-of-var-keyword-in-c 这仍然是一个很好的问题,就像最近几次被问到一样...... @Unsliced:对我来说,这个问题归结为:“如果在 5 年内有 15 个这个问题的副本,答案的深度各不相同——这对于寻找的人来说是好是坏?问题的最佳答案?” 【参考方案1】:

我发现它在某些类型声明很长的情况下很有用,例如:

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

变成

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

【讨论】:

【参考方案2】:

这相当于同一件事,因为使用 var 关键字,变量是隐式类型的,编译器会在构建时推断类型。在大多数情况下,我更喜欢指定类型而不是使用 var,因此我更改了我的 resharper 设置。

【讨论】:

-1:提问者是怎么做的,并且想知道决定哪条下落的依据。 我不认为我的回答是无用的,但值得一票否决 好的,取消投票 - 似乎其他人也有类似的看法(或者他们是否试图反驳我的“肮脏”?我当时给了它 -1 来对抗一个 +1 - 我相信不会增加太多的答案,只要它们保持在零,并且不会花费更长的时间才能得到一个实际上有深刻见解的答案。IOW ***.com/questions/1205329/c-var-keyword-usage/… 有我的 + 是有原因的1 和其他人也是。 就我个人而言,我只会否决错误或误导性的答案,但这取决于你。无论如何,问题是关于最佳实践,因此答案将是主观的。我说在大多数情况下我更喜欢显式类型变量。正如 codespeaker 所说,当类型声明很长时它看起来会更整洁,在这种情况下我可能会使用 var 来提高可读性。 我的意思是,在一个“最佳实践”问题上,答案实际上是“取决于”,说是或否是不够的 - 它需要是“我总是选择 Y/ N 因为 ....[,尽管我知道有些人说 ... - 我不同意,因为 ...”。不过,Resharper 设置点在这种情况下是一个独特且有用的点……。我实际上会在成熟的反思的基础上翻转并在此基础上 +1!【参考方案3】:

我记得 Resharper 只是说它可以这样写。它并没有说你应该。

很多建议只是我第一次看到它们时转过来的建议。这就是其中之一。

另一个是它说写“this.someProperty”是多余的,而我认为这样做会使代码更容易阅读。

【讨论】:

【参考方案4】:

Resharper 还建议将 if 语句转换为真或假。 几乎相同的东西,但这取决于你的编码风格。 因此,当您发现使用 var 更舒服时,请使用此建议。

【讨论】:

【参考方案5】:

我认为使用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 时你将如何实现案例;)

以上是关于C# var 关键字用法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中,我遇到了一个我不理解的关键字“this”的用法[重复]

C#中隐式类型本地变量var

在 C# 中使用“ref”关键字 [重复]

浅谈 var 关键字

C#中的var理解

php中var关键字用法