2016-10-01 236 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

,我将你的评论添加到我的答案中。 –