.net - ReSharper和var




implicit (5)

可能重复:
为什么ReSharper想要将'var'用于一切?

我有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用于fillBrushtextBrushsf


你确实可以把它关掉,我有。 我承认在某些类型名称很长的情况下它很好,比如:

SuperDisconfibulator sd=new SuperDisconfibulator();

将缩短为var是一个很好的候选人,但就个人而言,这是我唯一希望它改变的时间。 当从方法的返回值(如第二行)中分配变量时,我认为使用它不是一个好主意,因为它可能不会立即清楚它返回的变量类型究竟是什么。


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

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

最后,虽然我很欣赏其他人指出的快乐媒介(即使用varnew陈述)并且论证是有效且强大的,但我倾向于在一致性和短手可读性的基础上避开它。 我的一致性论点是,如果可读性对您来说非常重要,那么为什么不使用intAmount以便以后可以在代码中告诉数据类型?


这个问题是开始火焰战争的一个非常好的方法。 但是,你应该做任何事情,你和谁一起工作的人认为最具可读性。 关于var的辩论双方都有很好的论据。

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





implicit