我正在尝试通过获取和调用它的无参数构造函数来创建一个结构的实例,该结构的数据类型在编译时是未知的。以下(否则相当无用的)代码片段显示了我的操作:
pdfComparison cmp=new pdfComparison();
//Text Comparision page by page if(cmp.textComparision("ReferencePDF\\PDF2_302.pdf","C:\\\PDF2_305.pdf"))
{
System.out.print("\n********PDF text is identical******* ");
}
else
{
System.out.print("\n********PDF text is not identical******* ");
}
//Extract all images in PDF and compare
cmp.extract_ALL_Images_ThenCompare("PDF2_302.pdf","PDF2_302.pdf");
//Convert Both PDF pages into JPG and perform image comparison
cmp.PDF_Convert_To_Jpeg_Comparision("PDF2_302.pdf","PDF2_302.pdf");
这不起作用,因为var i = new System.Int32();
var type = i.GetType();
var constructor = type.GetConstructor(System.Type.EmptyTypes);
var value = constructor.Invoke(null);
返回type.GetConstructor(System.Type.EmptyTypes)
。当我逐步完成此操作时,我可以看到null
肯定是 type
,从第一行可以看出,有一个无参数构造函数。那么为什么我无法获得它?
我尝试使用用户定义的结构来排除内置类型中限制的可能性但显示相同的行为。
答案 0 :(得分:0)
第一行的工作原理并不意味着有一个构造函数。这可以编译为initobj
指令(简单地将内存空间归零),或者甚至(特别是int
的情况下取决于上下文)仅编译为ldc.i4.0
。那里没有调用构造函数。
答案 1 :(得分:0)
您不需要调用结构的无参数构造函数。只需使用激活器进行创建:
Activator.CreateInstance(i.GetType());
您无法获得结构的无参数构造函数的原因是它不存在。