我正在使用反射来创建来自外部程序集的对象。我的问题是我无法以这种方式创建对象:
Type t = assembly.GetType("ExternalClass");
object obj = Activator.CreateInstance(t, new object[] { data, Type.Missing, Type.Missing });
我得到System.MissingMethodException:附加信息:未找到类型“ExternalClass”的构造函数。
但是使用这种方式一切正常:
Type t = assembly.GetType("ExternalClass");
ConstructorInfo[] constructors = t.GetConstructors();
object obj = constructors[0].Invoke(new object[] { data, Type.Missing, Type.Missing });
ExternalClass
只有 1 个带有 2 个可选参数的构造函数,我确信我传递了正确的参数,因为第二种方法创建了我想要的对象。我在第一种方法中错过了什么吗?我更喜欢第一个,因为它更容易阅读
编辑:
我忘记了 CultureInfo
(为什么这个方法需要它?!)。解决方案是使用:
object obj = Activator.CreateInstance(t,
BindingFlags.CreateInstance |
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.OptionalParamBinding, null, new object[] { data, Type.Missing, Type.Missing }, CultureInfo.CurrentCulture);
最佳答案
这是使用Activator
构造构造函数的方式
(T)Activator.CreateInstance(typeof(T),
BindingFlags.CreateInstance |
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.OptionalParamBinding, null, new object[] { data, Type.Missing, Type.Missing }, CultureInfo.CurrentCulture);
关于c# - 使用反射创建对象时出现 MissingMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48844569/