我有一些类似的东西:
object[] parameter = new object[1]; parameter[0] = x; object instantiatedType = Activator.CreateInstance(typeToInstantiate, parameter);
和
internal class xxx : ICompare<Type> { private object[] x; # region Constructors internal xxx(object[] x) { this.x = x; } internal xxx() { } ... }
我得到:
引发异常:System.MissingMethodException:找不到类型为’xxxx.xxx’的构造方法。
有任何想法吗?
问题是Activator.CreateInstance(Type, object[])不考虑非公共构造函数。
Activator.CreateInstance(Type, object[])
例外情况 MissingMethodException:找不到匹配的公共构造函数。
例外情况
MissingMethodException:找不到匹配的公共构造函数。
通过将构造函数更改为public可见性可以很容易地看出这一点。该代码然后可以正常工作。
public
这是一种变通方法(已测试):
BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance; CultureInfo culture = null; // use InvariantCulture or other if you prefer object instantiatedType = Activator.CreateInstance(typeToInstantiate, flags, null, parameter, culture);
如果仅需要无参数构造函数,则此方法也将起作用:
//using the overload: public static object CreateInstance(Type type, bool nonPublic) object instantiatedType = Activator.CreateInstance(typeToInstantiate, true)