C# Can';t获取结构的无参数构造函数

C# Can';t获取结构的无参数构造函数,c#,reflection,struct,C#,Reflection,Struct,我试图通过获取并调用一个结构的无参数构造函数来创建一个在编译时数据类型未知的结构实例。下面的代码片段(在其他方面相当无用)显示了我的工作: var i = new System.Int32(); var type = i.GetType(); var constructor = type.GetConstructor(System.Type.EmptyTypes); var value = constructor.Invoke(null); 这不起作用,因为type.GetConstructo

我试图通过获取并调用一个结构的无参数构造函数来创建一个在编译时数据类型未知的结构实例。下面的代码片段(在其他方面相当无用)显示了我的工作:

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
肯定是
System.Int32
,从第一行可以明显看出,有一个无参数构造函数。那为什么我不能得到它呢


我对一个用户定义的结构也做了同样的尝试,以排除内置类型中限制的可能性,但这表明了相同的行为。

第一行有效并不意味着有构造函数。它被编译成
initobj
指令(它只是将内存空间归零),或者甚至(具体取决于上下文,在
int
的情况下)只编译成
ldc.i4.0
。那里没有调用构造函数。

您不需要调用结构的无参数构造函数。只需使用激活器进行创建:

Activator.CreateInstance(i.GetType());

无法获取结构的无参数构造函数的原因是它根本不存在。

您考虑过吗?严格来说,.net值类型可以有无参数构造函数-您不能从C#创建,但可以在IL中创建。这样的构造器是。。。如果您希望它们一直被使用,那么您需要非常小心,因为有很多场景不会调用constructor@MarcGravell我知道,但据我所知,这是对下一版本C#的功能要求。