我在iTextSharp.text.Rectangle和System.Drawing.Rectangle之间引入了一个模糊的引用。

时间:2016-10-01 08:41:20

标签: c# winforms itext

在我的代码中添加以下using语句后,我收到了大量含糊不清的引用错误:

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

这是错误的屏幕截图:

Example

有人知道造成这些错误的原因是什么吗?我如何介绍iTextSharp并避免这些错误?

1 个答案:

答案 0 :(得分:3)

您正在经历一些非常正常的事情,并且没有开发人员会将其描述为"创建错误。"当开发人员编写C#代码时,他会在某个命名空间中创建类。例如:在iText,我们在命名空间Font中创建了iTextSharp.text等类。

显然,类名Font不是非常原始的,还有其他库在不同的命名空间中使用相同的名称​​ 。甚至在C#编程语言中有一个名为Font的类,更具体地说,在名称空间System.Drawing中。

这完全没问题。编译器可以轻松查看iTextSharp.text.FontSystem.Drawing.Font之间的区别,因为它们具有不同的完全限定名称(即:类的全名,包括命名空间)。

在您的代码中,您会混淆编译器。您添加了using语句,允许编译器使用iTextSharp.text.Font类。但是,当您在代码中使用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));