冗余 'using' 语句?

Redundant 'using' statements?

查看 CodeAbbey 上的一些编程挑战解决方案,我注意到许多 C# 解决方案在代码开头实现了以下内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

除了System,似乎没有使用这些语句。它们甚至可以用于简单的循环程序。 Ideone 示例:1 2 3

这些语句实际上是代码运行所必需的,还是作为习惯添加的?

当您在项目中创建新的 class 文件时,它们通常作为模板的一部分添加。您可以安全地删除不使用的那些。一些工具(ReSharper、Roslyn 分析器等)会向您显示未使用的 using 语句并建议将其删除。

IDE(如 Visual Studio)在新文件的顶部自动生成一个 using 语句列表是很常见的。

如果不使用这些代码文件,则应清理这些代码文件以消除代码文件的混乱。但是,我假设编译器会在编译期间删除它们。

如果在 Visual Studio 2013 年,对于 .NET 4.5 项目,您添加新项目Class,你得到这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace (yournamespace)
{
    class Class1
    {
    }
}

包括那些 using。如果你不需要它们,你可以删除它们(或者你可以更容易地右击,Organize UsingsRemove Unused Usings

如果您随后发现需要它们,可以很容易地右击错误,解决使用(某物).

注意有一个例外:扩展方法。你不能 "automagically" Resolve, using (something) with extension methods。出于这个原因,删除 using System.Linq 可能会很痛苦,因为如果您使用 LINQ,则必须重新添加它 "manually"(通过键入 using System.Linq)。

不使用顶部的冗余 using 指令。但是,它们是完全无害的,前提是您的项目中出于其他原因引用了相应的 DLL。

冗余 using 指令通常来自代码模板。许多编程工作室会设置这样的模板供内部使用,以便他们的源文件的顶部看起来一致。

删除多余的 using 指令可在需要从模块中删除引用的 DLL 时简化代码维护。在这种情况下,即使未使用 using 指令也会触发编译错误,因此我建议删除它们。使用可用于自动维护 using 指令的工具,在程序顶部维护最小的 using 集变得非常容易,因此删除未使用的指令不需要大量工作。