【发布时间】:2016-11-25 07:08:04
【问题描述】:
不要说我有一些类有两个构造函数(没有参数和它们):
public class Employee
{
private int Salary = 0;
public Employee()
{
Salary = 100;
}
public Employee(int newSalary)
{
Salary = newSalary;
}
}
我有一些静态辅助类,它们具有调用构造函数的通用方法:
public static class GenericClassCreator
{
public static T CreateClassNoParams<T>()
where T : class, new()
{
return new T();
}
public static T CreateClassWithParams<T>(params object[] args)
where T : class
{
return (T)Activator.CreateInstance(typeof(T), args);
}
}
假设我有需要构造的类的类型(在这种特殊情况下为 typeof(Employee))并使用以下代码调用它的构造函数:
var method1 = typeof(GenericClassCreator).GetMethod("CreateClassNoParams");
var generic1 = method1.MakeGenericMethod(typeof(Employee));
var employee1 = generic1.Invoke(null, null);
var method2 = typeof(GenericClassCreator).GetMethod("CreateClassWithParams");
var generic2 = method2.MakeGenericMethod(typeof(Employee));
var employee2 = generic2.Invoke(null, new object[] { (object)500 });
获取employee1(通过不带参数的构造函数)是可以的。但是获取employee2(通过带参数的构造函数)抛出异常:
无法将 System.Int32 类型的对象转换为 System.Object[]
即使我改变了
generic.Invoke(null, new object[] { (object)500 });
到
generic.Invoke(null, new object[] { new object() });
抛出异常
无法将 System.Object 类型的对象转换为 System.Object[]
那么我的代码有什么问题?
【问题讨论】:
标签: c# .net generics reflection invoke