c# – Activator.CreateInstance(…)未找到参数化构造函数
发布时间:2020-12-15 08:09:28 所属栏目:百科 来源:网络整理
导读:给出以下示例代码; class Program{ static void Main(string[] args) { var results = GetChildren().ToList(); } static IEnumerableMyBaseClass GetChildren() { return Assembly.GetExecutingAssembly() .GetTypes() .Where(t = t.BaseType == typeof(MyB
给出以下示例代码;
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) { } } 我收到以下错误;
但是,如果我添加一个无参数构造函数,它会创建对象OK. 我想弄清楚为什么我要为CreateInstance提供的参数不会导致它找到正确的构造函数.有人有任何想法吗? 解决方法
基本上,method you are calling的第二个参数是
params array.发生的事情是C#编译器正在处理你的方法调用,好像你是在使用“未扩展”形式传递这个参数,即传递一个空数组引用.另一方面,您的意图是使用“展开”形式,即将引用传递给包含单个空引用的数组.
你可以哄骗编译器做你想做的事情: // Unexpanded: Activator.CreateInstance(o,new object[] { null }) // Expanded explictly: Activator.CreateInstance(o,(object) null ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |