c# – Activator.CreateInstance(…)未找到参数化构造函数

给出以下示例代码;
class Program
{
    static void Main(string[] args)
    {
        var results = GetChildren().ToList();
    }

    static IEnumerable<MyBaseClass> GetChildren()
    {
        return Assembly.GetExecutingAssembly()
            .GetTypes()
            .Where(t => t.BaseType == typeof(MyBaseClass))
            .Select(o => (MyBaseClass)Activator.CreateInstance(o,null));
    }
}

abstract class MyBaseClass
{ }

class MyChildClass : MyBaseClass
{
    public MyChildClass(object paramOne)
    {

    }
}

我收到以下错误;

MissingMethodException: Constructor on type ‘CreateInstanceCtorIssue.MyChildClass’ not found.

但是,如果我添加一个无参数构造函数,它会创建对象OK.

我想弄清楚为什么我要为CreateInstance提供的参数不会导致它找到正确的构造函数.有人有任何想法吗?

解决方法

基本上,method you are calling的第二个参数是 params array.发生的事情是C#编译器正在处理你的方法调用,好像你是在使用“未扩展”形式传递这个参数,即传递一个空数组引用.另一方面,您的意图是使用“展开”形式,即将引用传递给包含单个空引用的数组.

你可以哄骗编译器做你想做的事情:

// Unexpanded:
Activator.CreateInstance(o,new object[] { null })

// Expanded explictly:
Activator.CreateInstance(o,(object) null )

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...