为什么在C#中删除未使用的using指令?

bou*_*nav 115 .net c# using

我想知道是否有任何原因(除了整理源代码)为什么开发人员使用UsingsVisual Studio 2008中的"删除未使用"功能?

Joh*_*lla 183

有几个原因你想要把它们拿出来.

  • 这是毫无意义.他们没有增加价值.
  • 这令人困惑.该命名空间使用了什么?
  • 如果不这样做,那么using当代码随时间变化时,您将逐渐累积无意义的语句.
  • 静态分析较慢.
  • 代码编译速度较慢.

另一方面,没有太多理由让它们进入.我想你可以省去必须删除它们的努力.但如果你那么懒,你就会遇到更大的问题!

  • 一个优秀的程序员是懒惰的,他最大化的工作是不做.:d (58认同)
  • 我不同意一个优秀的程序员是懒惰的,但我同意你的陈述的情绪.一个优秀的程序员会删除它们以保持其代码清洁,从而避免为自己和他人未来的工作/问题/问题. (31认同)
  • 保留标准名称空间也是有好处的.在大型项目和团队中,留下它们可以减少潜在的合并冲突,减少用于代码审查的文件.此外,许多开发人员添加令人困惑且难以找到的扩展方法,有时为这些扩展方法定位所需的命名空间是一件麻烦事.新的开发人员可能习惯于将System.Linq包含在他们的代码文件中,并且在寻求帮助之前浪费了大量时间来弄清楚为什么某些方法不可用. (5认同)
  • 你可能想保留其中一些,以防止intellisense在未来的编码中愚蠢. (5认同)
  • 对,这是一个很好的链接.我想我的观点只是我们想要"好懒"而不是"懒惰"; 后者是编程人员无法编写好代码的地方. (2认同)
  • 根据我的经验,删除使用系统;使用 System.Collections.Generic;使用 System.Linq;(使用 System.Text;)比不使用它们更糟糕。编写“DateTime”或 StringBuilder 或 .Where(或许多其他内容)会带来压力,并且会浪费时间读取错误,例如:_“类型或命名空间‘DateTime’未解析...”。_或_“类型或命名空间“异常”未解决...“_. 或者像 _"XXX 不包含 'FirstOrDefault' 的定义,并且没有扩展方法 'FirstOrDefault' 接受第一个参数接受 X bla bla bla "_. (2认同)

mar*_*c_s 24

我会说相反 - 删除不需要的,不必要的使用语句非常有帮助.

想象一下,你必须在3个月,6个月,9个月内回到你的代码 - 或者其他人必须接管你的代码并维护它.

如果你有一个很长的使用声明的清单,并不是真正需要的,那么查看代码可能会非常混乱.为什么在那里使用,如果没有从该命名空间使用?

我想在专业环境中的长期可维护性方面,我强烈建议尽可能保持代码清洁 - 这包括从中倾倒不必要的东西.较少的混乱等于较少的混淆,因此更高的可维护性.


小智 14

在我看来,这是一个非常明智的问题,人们在回应时会以相当轻率的方式对待这个问题.

我要说任何对源代码的更改都需要合理.这些变化可能会产生隐藏成本,提出问题的人希望了解这一点.他们没有要求被称为"懒惰",因为一个人是动画.

我刚刚开始使用Resharper,它开始对我负责的项目发出警告和样式提示.其中包括删除冗余使用指令,还有冗余限定符,大写等等.我的直觉是整理代码并解决所有提示,但我的业务主管警告我不要进行不正当的更改.

我们使用自动构建过程,因此对SVN存储库的任何更改都会生成我们无法链接到项目/错误/问题的更改,并会触发自动构建和发布,这些更改不会对以前的版本进行任何功能更改.

如果我们看一下冗余限定符的删除,这可能会导致开发人员混淆,因为我们的Domain和Data层只能通过限定符来区分.

如果我看一下正确使用anachronyms(即ABCD - > Abcd)的大小写,那么我必须考虑到Resharper不会重构我们使用该引用类名的任何Xml文件.

因此,遵循这些提示并不像它看起来那么直截了当,应该受到尊重.

  • 好点,但你不应该忘记,保持清洁简单的代码增强了可维护性,这也是一个业务目标.你必须加重两者.理想情况下,您希望在发布后立即执行这些重构,以便您可以拥有尽可能干净的平板以启动新的并且有足够的时间来捕获最终的回归. (6认同)

cbp*_*cbp 13

Intellisense弹出窗口中的选项较少(特别是如果命名空间包含许多Extension方法).

理论上智能感知也应该更快.


hyp*_*man 13

除了已经给出的原因之外,它还可以防止不必要的命名冲突.考虑这个文件:

using System.IO;
using System.Windows.Shapes;

namespace LicenseTester
{
    public static class Example
    {
        private static string temporaryPath = Path.GetTempFileName();
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码无法编译,因为名称空间System.IO和System.Windows.Shapes都包含一个名为Path的类.我们可以通过使用完整的类路径来修复它,

        private static string temporaryPath = System.IO.Path.GetTempFileName();
Run Code Online (Sandbox Code Playgroud)

或者我们可以简单地删除该行using System.Windows.Shapes;.


小智 5

删除它们.更少的代码可以看到和想知道节省时间和混乱.我希望更多的人能够保持简单,简洁和整洁.这就像在你的房间里有脏衬衫和裤子.这很难看,你不得不想知道为什么会这样.