.net - ReSharper和var
implicit (5)
我有ReSharper 4.5并且到目前为止发现它非常宝贵,但我有一个顾虑;
它似乎想要隐含每个变量声明(var)。
作为一个相对较新的开发人员,在这方面我应该相信ReSharper多少钱?
从Paints Tab Headers的方法中获取以下代码片段。
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 。 我已经阅读了以下类似帖子, 在C#中使用var关键字 ,但我想从ReSharper的角度来看。
https://code.i-harness.com
Resharper不希望你使用var
,它给你提供了选择。 如果你确实使用var
那么它将为你提供使用显式类型的选项,所以你不能赢:-)。
编辑 - 讨论该主题的有趣link 。
它似乎可以关闭,转到Resharper - >选项 - >代码检查 - >检查严重性并向下滚动一点以查看与var
相关的选项。
Resharper主要关注帮助您重构代码,而var
关键字通常使重构更容易。 例如,如果任何这些函数的返回值都变为兼容类型,则不必更改任何此代码。 因此,现在重构你的tabCaseNotes
类型现在要容易一些。
就个人而言,我经常倾向于单独留下前两行,因为我喜欢看到变量的类型名称明确列在声明变量的行的某处 。 如果有的话,我可能会寻找一个可以使用的接口,这样我也可以获得与var
关键字相同的“泛型”,而不会丢失任何重要的可读类型信息。 但是,我肯定会将var
用于fillBrush
, textBrush
和sf
。
你确实可以把它关掉,我有。 我承认在某些类型名称很长的情况下它很好,比如:
SuperDisconfibulator sd=new SuperDisconfibulator();
将缩短为var是一个很好的候选人,但就个人而言,这是我唯一希望它改变的时间。 当从方法的返回值(如第二行)中分配变量时,我认为使用它不是一个好主意,因为它可能不会立即清楚它返回的变量类型究竟是什么。
在C#中,我更喜欢在任何地方使用var
。 为什么? 出于同样的原因,我使用firstName
而不是strFirstName
或amount
而不是intAmount
。 当然,更冗长的方式在一张纸上更具可读性,或者 - 正如你指出的那本书 - 但我的代码中还没有出现在书中。
现在,我向我的同事询问了一下这个intAmount
业务,他提出了一个非常好的观点。 他说它在直接文本编辑器中很有用,但是当你有Intellisense时,只需将鼠标悬停在变量上即可获得相同的信息。
最后,虽然我很欣赏其他人指出的快乐媒介(即使用var
与new
陈述)并且论证是有效且强大的,但我倾向于在一致性和短手可读性的基础上避开它。 我的一致性论点是,如果可读性对您来说非常重要,那么为什么不使用intAmount
以便以后可以在代码中告诉数据类型?
这个问题是开始火焰战争的一个非常好的方法。 但是,你应该做任何事情,你和谁一起工作的人认为最具可读性。 关于var的辩论双方都有很好的论据。
也就是说,如果您认为明确声明类型更具可读性,那就是您的业务。 你不必做Resharper告诉你的所有事情。 如果您愿意,甚至可以禁用该规则。