有啥办法可以摆脱 .cs 文件顶部的长长的使用列表吗?

Posted

技术标签:

【中文标题】有啥办法可以摆脱 .cs 文件顶部的长长的使用列表吗?【英文标题】:Is there any way to get rid of the long list of usings at the top of my .cs files?有什么办法可以摆脱 .cs 文件顶部的长长的使用列表吗? 【发布时间】:2010-09-08 21:35:25 【问题描述】:

随着我的解决方案中的命名空间越来越多,文件顶部的 using 语句列表越来越长。在我的单元测试中尤其如此,对于每个可能被调用的组件,我需要包括接口的使用、IoC 容器和具体类型。

在我的集成测试文件中有超过 17 行的使用,它变得非常混乱。有谁知道是否有一种方法可以使用语句为我的基础定义宏?还有其他解决方案吗?

【问题讨论】:

【参考方案1】:

我知道我不应该大声说出来,但是,也许要重新考虑你的设计。

17 个使用在 1 个文件中 = 大量耦合(在命名空间级别)。

【讨论】:

我想他提到他主要是在谈论测试。我认为你不能避免耦合你的测试! 这太傻了。尤其是引用其他 3 个组件的组件的单元测试文件。具有以下用途是完全合理的:1 MbUnit,1-2 rhino mocks,1 IoC,每个组件 1 个用于接口,1 个用于实现。每个消息类别 1 个。和整合?呃【参考方案2】:

有些人喜欢将用法隐藏在#region 中。否则,我认为你不走运。除非您想将命名空间放在所有引用对象上。

【讨论】:

【参考方案3】:

我自己受不了 Resharper。但我也不能忍受凌乱的使用语句。我使用 VS 的 Power Commands 插件,它有一个方便的“删除和排序”使用语句命令(以及其他好东西)。

【讨论】:

【参考方案4】:

这里有四个可能的问题;

您的代码中的命名空间将您的类划分得太细了。如果您有,例如;

using MyCompany.Drawing.Vector.Points;
using MyCompany.Drawing.Vector.Shapes;
using MyCompany.Drawing.Vector.Transformations;

考虑将它们折叠到单个 MyCompany.Drawing.Vector 命名空间。您可能不会通过划分太多来获得收益。 Visual Studio Code Analysis/FxCop 对此有一个规则,检查命名空间中的类数。太少了,它会警告你。

您在同一个类中放置了太多测试。如果您在同一个类中引用 System.DataSystem.DrawingSystem.IO,请考虑编写更多原子测试——一些哪些访问数据库,一些绘制图像,还有一些访问文件系统。然后将每种类型划分为三个测试类。

您正在编写太多功能的测试。如果您要引用大量命名空间,您的测试可能会将太多功能耦合在一起。这种耦合通常是有问题的,所以试着把大的、范围广泛的功能分解成更小的部分,并在单独的文件中测试它们。

很多都是多余的。它们都是用过的,还是只是从其他文件中复制粘贴过来的。右键单击代码编辑器并从“组织使用”选项中选择以删除未使用的语句。

【讨论】:

这主要是一次测试 4、6 甚至更多组件的集成测试的问题。因此,尽管您说我测试太多是正确的,但这就是集成测试的本质。【参考方案5】:

谁知道有没有办法 使用为我的基地定义一个宏 声明?

您的意思是您经常使用的命名空间会自动添加到每个新类中吗?如果是,Resharper 也可以这样做。此外,它还具有将使用放在代码清理区域中的功能。 Resharper 可能是要走的路(根据我自己的经验,你不会后悔的)。

【讨论】:

【参考方案6】:

VS2008 添加了一个“组织使用”上下文菜单,其中有一个排序、删除和“删除和排序”选项,可以按照每个文件执行您想要的操作。 Visual Studio Power Commands 加载项在解决方案资源管理器中为项目和解决方案添加了一个上下文菜单,该菜单分别是项目中所有文件和解决方案中所有项目的“删除和排序”。

【讨论】:

【参考方案7】:

如果要更改创建新文件时完成的默认 using 语句,请查看 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Code\1033 目录.它包含一堆 zip 文件,您可以修改它们以更改代码文件的模板(显然向上移动目录结构以更改其他语言或其他类型的文件)。

更多信息请参见here。

【讨论】:

【参考方案8】:

使用别名可能会有所帮助。不确定它是否值得,但不是:

using System.Web.UI;
using System.Web.Mail;
using System.Web.Security;
... Control ...
... MailMessage ...
... Roles ... 

你可以使用:

using W = System.Web;
... W.UI.Control ...
... W.Mail.MailMessage ...
... W.Security.Rolse ...

【讨论】:

【参考方案9】:

Resharper - Visual Studio 的插件 - 具有从文件中去除未使用的 Using 的功能,但我不知道有什么与您描述的完全一样。

【讨论】:

vs2008 也这样做右键->组织使用->删除未使用【参考方案10】:

在 VS2008 中,您可以右键单击 CS 文件并选择“组织使用”。它也会为您去除未使用的使用并对其进行分类。除此之外,我只会使用#region。此外, CTRL+M+O 将在设计时折叠所有区域功能等。我经常使用这个快捷方式!

【讨论】:

以上是关于有啥办法可以摆脱 .cs 文件顶部的长长的使用列表吗?的主要内容,如果未能解决你的问题,请参考以下文章

有啥办法可以防止 FormBuilder 元素滚动到页面顶部?

当列表位于导航栏下方时,如何摆脱出现在导航栏顶部的图层?

有啥办法可以获取java类中调用方法的列表吗? [复制]

有啥办法可以将元素添加到列表中,如图所示?

有没有办法摆脱 iPadOS 15 的多任务菜单栏?

无法退出太长的列表