ReSharper和var

可能重复:
为什么ReSharper想把“var”用于一切?

我有ReSharper 4.5,迄今为止发现它非常宝贵,但我有一个问题,
它似乎想要使每个variables声明隐式(var)。
作为一个相对较新的开发人员,在这方面我应该相信ReSharper多less?

从“涂料”选项卡标题的方法中选取以下代码片段。

TabPage currentTab = tabCaseNotes.TabPages[e.Index]; Rectangle itemRect = tabCaseNotes.GetTabRect(e.Index); SolidBrush fillBrush = new SolidBrush(Color.Linen); SolidBrush textBrush = new SolidBrush(Color.Black); StringFormat sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }; 

Resharper希望我把所有这5个变成var 。 我已经阅读了以下类似的post, 在C#中使用var关键字 ,但我想从ReSharper的angular度来看。

你不需要有这种types,使其更具可读性,这是个人喜好的问题。 我喜欢var变化:

 var currentTab = tabCaseNotes.TabPages[e.Index]; var itemRect = tabCaseNotes.GetTabRect(e.Index); var fillBrush = new SolidBrush(Color.Linen); var textBrush = new SolidBrush(Color.Black); var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }; 

更新:我会添加一个有争议的观点。 除非我正在阅读一本书中的代码,否则我通常不在乎理解某些代码行的具体types。 考虑一下.GetTableRectangle(e.Index),你不会显示它的代码:

 var itemRect = tabCaseNotes.GetTableRectangle(e.Index); //do some operations on itemRect 

在阅读特定的代码时,我会从itemRect上的操作而不是它的types中了解更多。 它可以是IRectangle,Rectangle,CustomRectangle,并且在代码处理方面仍然不会多说。 相反,我更关心itemRect.Height,itemRect.Width或itemRect.GetArea()以及所涉及的逻辑。

更新2:正如别人指出,你可以closures它。 确保让团队保持同样的做法,否则每当不同的人触及代码时,最终可能会以某种方式进行更改。 请参阅: http : //www.jetbrains.com/resharper/features/codeTemplate.html

Resharper主要关心的是帮助你重构代码, var关键字通常使得重构更容易。 例如,如果这些函数中的任何一个函数的返回值都变为兼容types,则不必更改这些代码中的任何一个。 例如,现在重构一下你的tabCaseNotestypes会更容易一些。

就个人而言,我经常倾向于单独留下前两行,因为我希望看到在variables声明的行上明确列出的variables的types名称。 如果有的话,我可能会寻找一个接口来使用,所以我也获得了与var关键字相同的“通用性”,而不会丢失任何重要的可读types信息。 但是,我肯定会使用var fillBrushtextBrushsf

Resharper不希望你使用var ,它是给你的选项。 如果你使用var它会给你select使用显式types,所以你不能赢得:-)。

编辑 – 讨论这个话题的有趣的链接 。

它似乎可以closures,转到Resharper – >选项 – >代码检查 – >检查严重性,向下滚动一下看到有关的选项var

Resharper认为这是最好的做法,但有些人不同意你已经阅读的链接文章。 我喜欢使用明确的声明来提高可读性,但是为了各自的目的。 如果要使用显式声明,则可以在Resharper中禁用该规则。

在C#中,我更喜欢在任何地方使用var 。 为什么? 出于同样的原因,我使用firstName而不是strFirstNameamount而不是intAmount 。 当然,更详细的方法是在一张纸上或者正如你指出的一本书上更具可读性,但是我的代码还没有出现在一本书中。

现在,我问了一个我的同事,回想一下这个intAmount业务,他提出了一个很好的观点。 他说在直接的文本编辑器中它是有用的,但是当你使用Intellisense时,只需将鼠标hover在variables上即可获得相同的信息。

最后,虽然我欣赏别人指出的愉快的媒介(即用new陈述使用var ),而且论证是有效和强有力的,但是我倾向于从一致性和短期可读性的唯一基础上转向。 我的一致性的观点是,如果可读性对你来说如此重要,那你为什么不使用intAmount以便稍后在代码中告诉数据types?

这个问题是一个启动火焰战争的好方法。 但是,你应该做任何你和你一起工作的人认为是最可读的。 关于var的辩论双方都有很好的论据。

也就是说,如果您认为明确声明types更具可读性,那就是您的业务。 你不必做Resharper告诉你的所有事情。 你甚至可以禁用该规则,如果你想。

你确实可以把它关掉,我也有。 我承认,在类types名称很长的情况下,

 SuperDisconfibulator sd=new SuperDisconfibulator(); 

将是一个很好的候选人被缩短为var,但个人,这是唯一的一次,我希望它改变。 当从一个方法的返回值(如你的第二行)分配一个variables的时候,我不认为它是一个好主意,因为它可能不会立即清楚它返回的是什么types的variables。