我想知道开发人员是否有任何原因(除了整理源代码之外)使用“删除未使用的 Usings“Visual Studio 2008 中的功能?

有帮助吗?

解决方案

您想要将它们删除有几个原因。

  • 没有用。它们没有增加任何价值。
  • 这很令人困惑。该命名空间正在使用什么?
  • 如果你不这样做,那么你就会逐渐积累毫无意义的东西 using 语句随着代码随时间的变化而变化。
  • 静态分析速度较慢。
  • 代码编译速度较慢。

另一方面,没有太多理由让他们留下来。我想您可以省去删除它们的麻烦。但如果你那么懒,你就会遇到更大的问题!

其他提示

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

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

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

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

马克

在我看来,这是一个非常明智的问题,受到回应的人正在以相当轻率的方式对待。

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

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

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

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

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

因此,遵循这些提示并不像看上去那么简单,应该受到尊重。

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

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

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

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

namespace LicenseTester
{
    public static class Example
    {
        private static string temporaryPath = Path.GetTempFileName();
    }
}

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

来修复它
        private static string temporaryPath = System.IO.Path.GetTempFileName();

或者我们可以使用System.Windows.Shapes删除行;

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

它还有助于防止错误的循环依赖,假设您还可以在删除未使用的使用后删除项目中的某些dll /项目引用。

代码编译速度更快。

至少在理论上,如果给你一个C#.cs文件(或任何单个程序源代码文件),你应该能够查看代码并创建一个模拟所需内容的环境。使用一些编译/解析技术,您甚至可以创建一个自动执行此操作的工具。如果至少在您完成此操作时,您可以确保您了解代码文件所说的所有内容。

现在考虑,如果给你一个带有1000 的.cs文件,使用指令,实际上只使用了10个。每当您查看引用外部世界的代码中新引入的符号时,您将不得不通过这1000行来弄清楚它是什么。这显然会减慢上述程序。所以,如果你可以将它们减少到10,那就会有所帮助!

在我看来,使用指令的C#非常弱,因为你不能指定单个通用符号而不会丢失泛型,并且你不能使用 using alias directive来使用扩展方法。在Java,Python和Haskell等其他语言中并非如此,在这些语言中,您可以(几乎)准确地指定您想要的外部世界。但事件发生后,我建议尽可能使用使用别名。

最近我还有另一个原因,为什么删除未使用的导入是非常有用和重要的。

想象一下,你有两个程序集,其中一个引用另一个程序集(现在让我们调用第一个 A 和引用的 B )。现在当你在A中的代码依赖于B时一切都很好。但是,在开发过程的某个阶段,您会注意到实际上不再需要该代码,但是将using语句留在原来的位置。现在你不仅有一个没有意义的使用 -directive,而且 assembly-reference B ,除了过时的指令之外,它不会在任何地方使用。这首先会增加编译 A 所需的时间,因为 B 也必须加载。

因此,这不仅是一个更清晰,更易于阅读的代码问题,而且还是在生产代码中维护程序集引用的问题,其中并非所有引用的程序集都存在

最后在我们的例子中,我们必须将B和A一起发送,尽管B不是在A中的任何地方使用,而是在中使用 -section。当加载程序集时,这将大大影响运行时 - A 的性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top