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

I introduced an ambiguous reference between iTextSharp.text.Rectangle and System.Drawing.Rectangle

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

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

这是错误的屏幕截图:

有人知道是什么导致了这些错误吗?如何引入 iTextSharp 并避免这些错误?

您遇到的情况非常正常,开发人员不会将其描述为 "creating errors." 当开发人员编写 C# 代码时,他会在特定命名空间中创建 classes。例如:在 iText,我们在命名空间 iTextSharp.text.

中创建了 class 等 Font

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

完全可以。编译器可以很容易地看出 iTextSharp.text.FontSystem.Drawing.Font 之间的区别,因为它们具有不同的 完全限定名称 (即: class,包括命名空间)。

在您的代码中,您混淆了编译器。您添加一个 using 语句,允许编译器使用 iTextSharp.text.Font class。但是,当您在代码中使用 Font class 时,您没有指定要使用哪个 Font class。你的编译器问你:你是想使用 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));