Les'tを経由してパラメータを持つジェネリックメソッドを呼び出して、私は2つのコンストラクタ(パラメータなしのそれらとの)といくつかのクラスを持っていると言う:[]反射
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演算(従業員))を構築する必要があるクラスの種類と電話を持っていると仮定しましょうそれはthを持つコンストラクタですE次のコード(パラメータなしのコンストラクタを介して)
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はOKです。しかし、(パラメータを持つコンストラクタを介して)employee2を取得すると例外がスローされます。
私はgeneric.Invoke(null, new object[] { (object)500 });
を変更しても、[]
のSystem.Objectに型可能System.Int32のオブジェクトをキャストすることができません
〜
generic.Invoke(null, new object[] { new object() });
例外がスローされました
System.Objectの[]
にSystem.Object型のオブジェクトをキャストすることができません
それでは、私のコードが悪いですの?
ちょうどこれをテストし、それは働いた。 –
ああ.. 'object []'は別の 'object []'を含んでいます - 本当に混乱します:)。どうも。 – bairog