Activator.CreateInstance报MissingMethodException:FileDatabase构造参数匹配却找不到
问题根源与解决方案
核心原因:参数类型不匹配
你原代码中构造buildParam数组时犯了类型错误:
FileDatabase的构造函数需要的参数是DbConfig+string- 但你通过
Prepend(buildConfig)插入的是DbData类型的实例,最终buildParam数组变成了DbData+string,和构造函数的参数类型完全不匹配,CLR无法找到对应的构造函数,因此抛出MissingMethodException。
代码细节拆解
- 驱动代码调用时,传入的
buildParam只有dbPath(string类型) - 你执行了这段代码:
这里把var buildConfig= new DbData(config); buildParam= buildParam.ToList().Prepend(buildConfig).ToArray();DbData实例插到了参数数组最前面,导致最终参数数组的类型是[DbData, string],和FileDatabase要求的[DbConfig, string]类型不符。 - 而你手动构造的数组
new object[]{config,"someStringValue"},类型是[DbConfig, string],完全匹配构造函数的参数类型,所以能成功创建实例。
调试器的误导
你说调试器显示参数“完全匹配”,这是因为调试器通常只展示对象的内部内容(比如DbData里包含DbConfig的属性),但不会高亮显示参数的实际类型,导致你误以为类型一致,但CLR查找构造函数是严格按类型匹配的,哪怕两个类型结构相似,只要不是同一类型/派生关系(这里DbData和DbConfig应该是无关类型),就无法匹配。
修复方案
把Prepend(buildConfig)改成Prepend(config),直接传入原始的DbConfig实例,这样最终的buildParam数组类型就和构造函数匹配了:
buildParam= buildParam.ToList().Prepend(config).ToArray();
内容的提问来源于stack exchange,提问作者Freddyy
相关产品推荐
相关产品推荐

