我最近编写了许多适用于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指令,以便别名可以在需要的地方使用,但在引用不明确的地方省略?
答案 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保持在一个单独的类/模块中,以避免出现冲突的命名空间问题。