泛型类型变量和泛型class变量的调用方法
Call method of generic type variable and generic class variable
我有以下源代码:
Type classType = x;
Type genericType = y;
var var1 = 1;
var var2 = 2;
object obj = Activator.CreateInstance(classType<genericType>);
obj.MyMethod(var1, var2);
当然没有用。我必须在我的 <> 中使用 Class 而不是类型的对象。我的另一个问题是,我不能在没有转换的情况下调用 MyMethod。但是我在运行时有两种类型,所以应该有一个方法。
编辑:抱歉这个简短的问题,我希望它足够了。但这可能有助于理解我的问题:
class Base<T> where T : Entity
{
public T[] MyMethod(int a)
{
return ActiveRecordMediator<T>.Find(a);
}
}
class ABase : Entity
{
}
class BBase : Entity
{
}
public class AClass : Base<ABase>
{
}
public class BClass : Base<BBase>
{
}
现在我想调用myMethod。但我可能有这样的事情:
AClass<ABase> object = new AClass<ABase>();
object.MyMethod(10);
但我现在只是在运行时使用我的类型 classType 和我的类型 genericType。我可以投这样的东西:
((Base)object).MyMethod(10);
但是我在这里需要通用类型。
你必须使用MakeGenericType
dynamic obj = Activator.CreateInstance(classType.MakeGenericType(genericType));
obj.MyMethod(var1, var2);
并且使用 dynamic
调用 MyMethod
很容易(如果您必须一次调用一个方法,它甚至不会太慢)
我有以下源代码:
Type classType = x;
Type genericType = y;
var var1 = 1;
var var2 = 2;
object obj = Activator.CreateInstance(classType<genericType>);
obj.MyMethod(var1, var2);
当然没有用。我必须在我的 <> 中使用 Class 而不是类型的对象。我的另一个问题是,我不能在没有转换的情况下调用 MyMethod。但是我在运行时有两种类型,所以应该有一个方法。
编辑:抱歉这个简短的问题,我希望它足够了。但这可能有助于理解我的问题:
class Base<T> where T : Entity
{
public T[] MyMethod(int a)
{
return ActiveRecordMediator<T>.Find(a);
}
}
class ABase : Entity
{
}
class BBase : Entity
{
}
public class AClass : Base<ABase>
{
}
public class BClass : Base<BBase>
{
}
现在我想调用myMethod。但我可能有这样的事情:
AClass<ABase> object = new AClass<ABase>();
object.MyMethod(10);
但我现在只是在运行时使用我的类型 classType 和我的类型 genericType。我可以投这样的东西: ((Base)object).MyMethod(10); 但是我在这里需要通用类型。
你必须使用MakeGenericType
dynamic obj = Activator.CreateInstance(classType.MakeGenericType(genericType));
obj.MyMethod(var1, var2);
并且使用 dynamic
调用 MyMethod
很容易(如果您必须一次调用一个方法,它甚至不会太慢)