2016-10-01 166 views
-1

之間不明確的引用後,我下面using語句添加到我的代碼,我得到很多不明確的引用錯誤的:我介紹iTextSharp.text.Rectangle和System.Drawing.Rectangle

using iTextSharp.text; 
using iTextSharp.text.pdf; 

這是一個屏幕錯誤的鏡頭:

Example

有誰知道是什麼引起這些錯誤?我如何介紹iTextSharp並避免這些錯誤?

+0

沒有你添加從'NuGet'參考或手動添加呢? –

+0

它似乎是兩個版本的相同參考之間的衝突。 –

+0

我用nuget添加它 – Cleaven

回答

3

您正在經歷非常正常的事情,沒有開發人員會將其描述爲「製造錯誤」。當開發人員編寫C#代碼時,他會在特定的名稱空間中創建類。例如:在iText中,我們在命名空間iTextSharp.text中創建了諸如Font的類。

顯然,類名稱Font不是很原創,還有其他庫在其他名稱空間中使用相同名稱。在C#編程語言中甚至有一個名爲Font的類,更具體地說在命名空間System.Drawing中。

這很完美。編譯器可以很容易地看到iTextSharp.text.FontSystem.Drawing.Font之間的區別,因爲它們具有不同的標準名稱(即:類的全名,包括名稱空間)。

在你的代碼中,你會混淆編譯器。您添加一條using語句,該語句允許編譯器使用iTextSharp.text.Font類。但是,如果在代碼中使用Font類,則不會指定要使用哪個類。你的編譯器問你:你的意思是使用iTextSharp.text.Font還是System.Drawing.Font?還有:你的意思是使用iTextSharp.text.Rectangle還是System.Drawing.Rectangle

您可以通過使用完全限定名稱來解決此問題,以免編譯器不再困惑。

舉例來說,如果沒有命名空間,你的編譯器不知道你的意思是:

pnlReport.DrawToBitMap(bm, new System.Drawing.Rectangle(0, 0, width, height)); 

或:

pnlReport.DrawToBitMap(bm, new iTextSharp.text.Rectangle(0, 0, width, height)); 

所以,你必須使用:

pnlReport.DrawToBitMap(bm, new System.Drawing.Rectangle(0, 0, width, height)); 

代替:

pnlReport.DrawToBitMap(bm, Rectangle(0, 0, width, height)); 

您還可以使用命名空間的別名,如:

using sys = System.Drawing; 

簡化召喚這樣的:

pnlReport.DrawToBitMap(bm, new sys.Rectangle(0, 0, width, height)); 
+1

您還可以使用名稱空間別名(如*)使用sys = System.Drawing; *來簡化調用(將* pnlReport.DrawToBitMap(bm,new sys.Rectangle(0,0,width,height)); * then) – BudBrot

+0

,我將你的評論添加到我的答案中。 –