给出以下示例代码;
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)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误;
MissingMethodException:找不到类型"CreateInstanceCtorIssue.MyChildClass"的构造函数.
但是,如果我添加一个无参数构造函数,它会创建对象OK.
我试图弄清楚为什么我要为CreateInstance提供的参数不会导致它找到正确的构造函数.有人有任何想法吗?
Ani*_*Ani 10
基本上,您调用的方法的第二个参数是params数组.发生的事情是C#编译器正在处理你的方法调用,好像你在使用"未扩展"形式传递这个参数,即通过传递null数组引用.另一方面,您的意图是使用"展开"形式,即将引用传递给包含单个空引用的数组.
你可以哄骗编译器做你想做的事情:
// Unexpanded:
Activator.CreateInstance(o, new object[] { null })
// Expanded explictly:
Activator.CreateInstance(o, (object) null )
Run Code Online (Sandbox Code Playgroud)