C# 使用C中已知的TypeObject中的泛型#
可能重复:C# 使用C中已知的TypeObject中的泛型#,c#,.net,generics,C#,.net,Generics,可能重复: 我有一个泛型方法,我希望它在运行时用一个已知类型的对象调用它 public class someClass { public void someGenericMethod<T>() { //some Code to Execute } public void someMthod() { Type objectType = someInstance.getType(); someGenericMethod<obj
我有一个泛型方法,我希望它在运行时用一个已知类型的对象调用它
public class someClass {
public void someGenericMethod<T>()
{
//some Code to Execute
}
public void someMthod()
{
Type objectType = someInstance.getType();
someGenericMethod<objectType>(); //this isn't valid code, but I want to do something like this.
}
}
公共类someClass{
public void someGenericMethod()
{
//一些要执行的代码
}
公共无效的方法()
{
类型objectType=someInstance.getType();
someGenericMethod();//这不是有效的代码,但我想这样做。
}
}
在C#/.net中有没有办法做到这一点,或者有没有解决办法?这是可能的,但很难看:
var method = typeof (someClass).GetMethod("someGenericMethod").MakeGenericMethod(objectType);
method.Invoke(this, null);
这是可能的,但很难看:
var method = typeof (someClass).GetMethod("someGenericMethod").MakeGenericMethod(objectType);
method.Invoke(this, null);
您可以使用反射:
var genericMethod = typeof(someClass).GetMethod("someGenericMethod");
var methodInstance = genericMethod.MakeGenericMethod(objectType);
methodInstance.Invoke(someInstance, null);
您可以使用反射:
var genericMethod = typeof(someClass).GetMethod("someGenericMethod");
var methodInstance = genericMethod.MakeGenericMethod(objectType);
methodInstance.Invoke(someInstance, null);
你想完成什么?
someGenericMethod
中还有很多东西需要想象。你需要那个方法是泛型的吗?你能把一个类型作为一个参数传递吗?@George,依我看,只有一种逻辑方法可以解释OP对他的例子的意图。很抱歉重复了。(在我的搜索词中没有找到这个问题)你想实现什么?someGenericMethod
中还有很多东西需要想象。你需要那个方法是泛型的吗?你能把一个类型作为一个参数传递吗?@George,依我看,只有一种逻辑方法可以解释OP对他的例子的意图。很抱歉重复了。(在我的搜索词中没有发现这个问题)我也不能想象这是对性能友好的,对吗?@Matthew,找到方法的初始反射调用非常慢,但是动态调用应该不会太糟糕(说起来很离奇;实际上还没有量化这些估计)。您可以加快调用部分的速度(如果需要频繁调用)使用Delegate.CreateDelegate(在这种情况下不太难,因为类型参数不用于返回值或任何参数。)如果使用类型参数,则会产生进一步的复杂情况(如果确实希望使用DynamicMethod和Emit,可以解决此问题。)我也无法想象这对性能是友好的,对吗?@Matthew,找到方法的初始反射调用非常慢,但是动态调用应该不会太差(说起来很有趣;实际上没有量化这些估计)。您可以加快调用部分(如果需要频繁调用)通过使用Delegate.CreateDelegate(在本例中不太难,因为类型参数不用于返回值或任何参数。)如果使用类型参数,则会产生进一步的复杂情况(如果确实希望使用DynamicMethod和Emit,可以解决此问题。)