Microsoft是否不鼓励在C#中使用'var'?(VS2017)


15

我正在看即将到来的Visual Studio 2017

在标题为“ 提高生产力 ”的部分下,有一张Visual Studio图像,用于将所有出现的var替换为显式类型。

VS2017提高了生产力

该代码显然有一些问题,Visual Studio已将其识别为“需要修复”。

我想仔细检查一下我对C#中var用法的理解,因此我读了Eric Lippert在2011年发表的一篇文章,文章名称为隐式类型的使用和滥用

埃里克(Eric)说:

  • 必要时使用var;当您使用匿名类型时。
  • 当声明的类型对初始化器来说很明显时,请使用var,尤其是在创建对象时。这消除了冗余。
  • 如果代码强调变量的语义“业务目的”并轻视变量存储的“机械”细节,请考虑使用var。
  • 如果需要这样做,则必须使用显式类型,以便正确理解和维护代码。
  • 无论是否使用“ var”,都使用描述性变量名称。变量名称应代表变量的语义,而不是变量存储的详细信息;“ decimalRate”不好;“ interestRate”很好。

我认为代码中的大多数var用法都可以。我认为不要将var用于读取的位...

var tweetReady = workouts [ ... ]

...因为它不是100%立即是什么类型,但是即使那样我还是很快就知道它是boolean

这部分的var用法...

var listOfTweets = new List<string>();

...在我看来完全像var的用法一样,因为我认为执行以下操作是多余的:

List<string> listOfTweets = new List<string>();

尽管根据Eric所说的,变量应该可能是tweets而不是listOfTweets

更改所有var用途的原因是什么?我缺少此代码有什么问题吗?


屏幕截图中的代码正是您所同意的,不应该使用var ...澄清吗?
Telastyn

1
我认为var这里的所有用法都可以。您可以更改一个-即便如此,我仍然认为确实没有必要。为什么将它们全部更改为显式类型?
罗恩·弗里曼

2
请记住,对于人类来说显而易见的东西在Visual Studio中并不总是显而易见的。
candied_orange

所有?屏幕截图中有一个与var相关的错误。
Telastyn

好吧,这不是错误,而是警告您希望短绒棉指出的那种警告。根据图片,所有vars标记都以相同的方式标记;旁边带有相同的警告十字标记,并带有红色下划线。大概Visual Studio希望以相同的方式纠正它们。除非我弄错了。
罗恩·弗里曼

Answers:


26

TL; DR:不,Microsoft并不反对在C#中使用'var'。该图像只是缺少上下文来解释其抱怨的原因。

如果安装VS2017 RC并打开“选项”面板并转到Text Editor -> C#,则会看到一个新部分:Code Style。这类似于ReSharper提供了一段时间的功能:一组用于编码样式的可配置规则。

围绕使用,它包括三个选项var:对于内置类型(当变量类型明显时)和“在其他地方”。在每种情况下,您都可以指定“首选显式类型”或“首选var”,并将通知级别设置为“无”,“建议”,“警告”或“错误”:

在此处输入图片说明


3
默认值是多少?如果“工厂设置”是“首选显式类型”,则可以认为MS不鼓励使用var
JacquesB

@JacquesB,默认值如屏幕截图所示。由于所有参数均设置为“无”,因此很难知道是否已将“首选显式类型”主动设置为MS的首选方式,或者这仅仅是“零值”。就我而言,最好的开发人员都赞成var,因此我不太关心MS在此问题上的看法。
David Arno

6

我认为您对它的阅读太多了。因此,有一个功能允许您使用显式类型注释替换隐式类型的用法,并由此得出结论,不鼓励使用隐式类型。还有一个将C♯编译为CIL字节码的功能,您是否可以认为C♯不受欢迎,而我们都应该编写CIL字节码呢?可能不会。

Microsoft只是在炫耀IDE对您的代码的深刻理解。它甚至可以为您编写类型,而无需您拼出它们。而已。

这仅仅是展示IDE的代码理解功能的一个很好的例子。它体积小且设备齐全(不同于显示较大的重构),在所有版本中均可用,并且适用于所有开发人员(与某些公认的令人印象深刻的建筑可视化功能不同,这些功能仅在Ultimate中可用,不适用于很大一部分) VS的潜在用户,他们永远不会有那么大的项目),尽管它非常简单(从字面上看,这是csc.exe自从那时以来一直在做的事情)var引入),它的确看起来令人印象深刻,特别是对于那些真正不了解隐式类型和类型推断的人(或者试图谷歌“类型推断”并且对诸如Hindley-Milner,统一,回溯之类的词不知所措的人) C♯的仅本地推断非常简单明了。

简而言之:这是炫耀IDE功能的一种浮华的方式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.