有没有办法避免多余的"使用"当我只想在某些时候使用别名时的指令?

时间:2016-08-12 13:24:40

标签: c# namespaces

我最近编写了许多适用于Windows Forms和Excel Interop的代码。我遇到的其中一件事是含糊不清的参考文献。例如,如果我尝试创建一个新的Excel应用程序,它就不起作用。

Application app = new Application { Visible = true };

此行返回错误,因为对Application的引用不明确。它可以引用Excel应用程序,但它也可以引用Windows窗体应用程序。

而不是输入:

Microsoft.Office.Interop.Excel.Application = new Microsoft.Office.Interop.Excel.Application { Visible = true };

我知道我可以将使用指令更改为:

using Excel = Microsoft.Office.Interop.Excel;

然后将我的应用声明更改为:

Excel.App app = new Excel.App { Visible = true};

但是,稍后在我的代码中,我必须声明相当多的工作表和工作簿。不使用" Excel = Microsoft ..."命名空间别名,我可以这样做,因为对工作簿和工作表的引用不明确:

Workbook someWorkbook = app.Workbooks.Add();
Worksheet someWorksheet = app.ActiveSheet;

但是当我将using指令改为

using Excel = Microsoft.Office.Interop.Excel;

我必须将使用Excel对象的所有声明更改为" Excel.someObject",或者我必须添加第二个using指令:

选项1:

using Excel = Microsoft.Office.Interop.Excel;
...
Excel.Application app = new Application { Visible = true };
Excel.Workbook someWorkbook = app.Workbooks.Add();
Excel.Worksheet someWorkSheet = app.ActiveSheet;

选项2:

using Excel = Microsoft.OFfice.Interop.Excel;
using Microsoft.Office.Interop.Excel;
...
Excel.Application app = new Application { Visible = true };
Workbook someWorkbook = app.Workbooks.Add();
Worksheet someWorkSheet = app.ActiveSheet;

我更喜欢选项2,这是我的迂腐,但是必须使用指令写两个来引用同一个库的冗余是令人厌烦的。 是否有第三个选项允许我编写我的声明,如选项2所示,而不必使用两个using指令?也就是说,有没有办法编写我的using指令,以便别名可以在需要的地方使用,但在引用不明确的地方省略?

2 个答案:

答案 0 :(得分:1)

如果您所在的文件不需要引用// now I need to "commit" chart.startDate = event.startDate; chart.endDate= event.endDate; chart.validateData(); chart.animateAgain(); (项目中的大多数文件都应该如此),请在命名空间级别添加System.Windows.Forms.Application

using Microsoft.Office.Interop.Excel

这样using System.Windows.Forms; namespace TestForms { using Microsoft.Office.Interop.Excel; class TestClass { Application app = ... // This refers to Microsoft.Office.Interop.Excel.Application } } 将赢得" Microsoft.Office.Interop.Excel.Application声明之后的所有课程都超过System.Windows.Forms.Application

答案 1 :(得分:1)

  

是否有第三个选项允许我将我的声明写为   在选项2中看到,而不必使用两个using语句?

没有。那没有。您最好的选择是使用选项2.

用于别名支持的

using directive用于指定类型或命名空间的别名。

您应该查看Resharper,它可以帮助您比Visual Studio更好地进行清理。

这个问题也可以通过更好的设计来解决。尝试将您的工作与Excel保持在一个单独的类/模块中,以避免出现冲突的命名空间问题。