2016-08-12 56 views
2

我一直在寫很多代碼,最近可以與Windows Forms和Excel Interop一起使用。我遇到的其中一個問題是模棱兩可的引用。例如,如果我嘗試創建一個新的Excel應用程序,它不起作用。有沒有辦法避免多餘的「使用」指令,當我只想在某些時候使用別名?

Application app = new Application { Visible = true }; 

此行返回錯誤,因爲對應用程序的引用不明確。它可以引用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 =微軟...」命名空間別名,我可以做到這一點,因爲引用簿和工作表並不含糊:

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

但是,當我用我的指令改爲

using Excel = Microsoft.Office.Interop.Excel; 

我不得不改變使用Excel對象爲「Excel.someObject」所有聲明,或我要添加第二個使用指令:

選項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指令?也就是說,有沒有辦法寫我的使用指令,以便可以在需要時使用別名,但在引用不明確時省略?

+2

你已經知道所有的可能性。我會使用選項2,我不覺得它令人討厭。 – sam

+2

'使用'*指令*。 'using'語句是自動爲您調用'Dispose'的塊。不幸的是,有兩個完全不同的功能與類似的名字,但它是。因此,對所用功能使用* correct *名稱而非另一個名稱是有幫助的。 –

+0

我的不好。我將進行編輯。 – arbitrarystringofletters

回答

1

如果你是在不需要參考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會「對於所有遵循using聲明的課程,獲得「System.Windows.Forms.Application」。

+0

謝謝!這正是我所尋找的,因爲它適用於我的情況,但我也很欣賞Habib的回答,因爲它可以幫助我避免陷入這種情況。 – arbitrarystringofletters

1

是否有第三種選擇允許我在選項2中看到我的聲明爲 而不必使用兩個using語句?

不,沒有。您最好的選擇是使用選項2.

usingdirective用於別名支持對於指定類型或名稱空間的別名很有用。

你應該看看Resharper,它可以幫助你比Visual Studio做更好的清理。

這個問題也可以用更好的設計來解決。嘗試將與Excel相關的工作保存在單獨的類/模塊中,以避免名稱空間衝突問題。

+1

謝謝!編寫未來的代碼時,我會牢記這一點。 – arbitrarystringofletters

+0

我同意選項2更好。這是另外一行代碼,用「Excel」預處理每個工作簿/表單聲明。 – arbitrarystringofletters

相關問題