我有ReSharper 4.5并且发现它迄今为止非常宝贵,但我有一个顾虑;
它似乎想要隐含每个变量声明(var)
作为一个相对新的开发人员,在这方面我应该相信ReSharper多少钱?
从绘制标签标题的方法中获取以下代码段。
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 。我已阅读以下类似帖子Use of var keyword in C#,但我想从ReSharper的角度来了解。
答案 0 :(得分:43)
Resharper主要关注帮助您重构代码,而var
关键字通常会使重构变得更容易。例如,如果任何这些函数的返回值都更改为兼容类型,则不必更改任何此代码。因此,现在重构您的tabCaseNotes
类型会更容易一些。
就个人而言,我经常倾向于单独留下前两行,因为我希望在声明变量的行上看到明确列出 somewhere 的变量的类型名称。如果有的话,我可能会寻找一个可以使用的接口,这样我也可以获得与var
关键字相同的“泛型”,而不会丢失任何重要的可读类型信息。但是,我肯定会将var
用于fillBrush
,textBrush
和sf
。
答案 1 :(得分:16)
您不需要在该行中使用该类型以使其更具可读性,这取决于个人偏好。我喜欢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
};
更新:我会在其上添加一个有争议的观点。除非我正在阅读一本书中的代码,否则我通常不关心理解我正在阅读的一些代码行的具体类型。考虑.GetTableRectangle(e.Index),您没有显示对其进行操作的代码:
var itemRect = tabCaseNotes.GetTableRectangle(e.Index);
//do some operations on itemRect
在阅读特定代码时,我会从itemRect上的操作比从其类型更多地理解它。它可以是IRectangle,Rectangle,CustomRectangle,但仍然不会说明代码在做什么。相反,我更关心itemRect.Height,itemRect.Width或itemRect.GetArea()以及所涉及的逻辑。
更新2:正如其他人所指出的,您可以将其关闭。确保团队采用相同的做法,或者每次不同的人接触代码时,您可能会以某种方式进行更改。请参阅:http://www.jetbrains.com/resharper/features/codeTemplate.html
答案 2 :(得分:14)
Resharper不希望您使用var
,它会为您提供选项。如果您确实使用var
,那么它将为您提供使用显式类型的选项,因此您无法获胜:-)。
编辑 - 讨论该主题的有趣link。
似乎可以关闭,转到Resharper - >选项 - >代码检查 - >检查严重性并向下滚动一点以查看与var
相关的选项。
答案 3 :(得分:6)
Resharper认为这是最好的做法,但有些人不同意,因为你已经阅读了链接的帖子。我喜欢使用显式声明来提高可读性,但是对于每个人都有自己的可读性。如果要使用显式声明,可以在Resharper中禁用该规则。
答案 4 :(得分:6)
在C#中,我更喜欢在任何地方使用var
。为什么?出于同样的原因,我使用firstName
代替strFirstName
或amount
而不是intAmount
。当然,更冗长的方式在一张纸上更具可读性,或者 - 正如你所指出的那样 - 一本书,但我的代码中还没有出现在书中。
现在,我向我的一位同事询问了这个intAmount
业务,他提出了一个非常好的观点。他说它在直接文本编辑器中很有用,但是当你有Intellisense时,只需将鼠标悬停在变量上即可获得相同的信息。
最后,虽然我很欣赏其他人指出的快乐媒介(即使用var
和new
语句)并且论证是有效且强大的,但我倾向于避开仅基于一致性和短手可读性。我的一致性论点是,如果可读性对您来说非常重要,那么为什么不使用intAmount
以便稍后在代码中告诉数据类型呢?
答案 5 :(得分:0)
这个问题是开始火焰战的一个非常好的方法。但是,你应该做任何你做的事情,而你工作的人认为最具可读性。关于var的争论双方都有很好的论据。
也就是说,如果您认为明确声明类型更具可读性,那就是您的业务。你不必做Resharper告诉你的所有事情。如果您愿意,甚至可以禁用该规则。
答案 6 :(得分:0)
你确实可以把它关掉,我有。我承认在某些类型名称很长的情况下很好,例如:
SuperDisconfibulator sd=new SuperDisconfibulator();
将是缩短为var的良好候选人,但就个人而言,这是我唯一希望改变的时间。当从方法的返回值(如第二行)中分配变量时,我认为使用它不是一个好主意,因为它可能不会立即清楚它返回的变量类型究竟是什么。