2011-11-28 87 views
0

可能重复:
Calling generic method with a type argument known only at execution time使用泛型

我有一个通用的方法,我希望它用在已知TypeObject叫它运行。

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. 
    } 
} 

有没有办法在C#/ .net中做到这一点或有一种解决方法?

+0

什么是你想实现什么? 'someGenericMethod'中有许多想象力。你需要这种方法是通用的吗?你可以改为传递一个类型作为参数吗? –

+3

@George,国际海事组织,只有一种逻辑方式来解释OP在他的例子中的意图。 –

+0

抱歉,重复。 (没有发现这个问题与我的搜索条件) –

回答

3

您可以使用反射:

var genericMethod = typeof(someClass).GetMethod("someGenericMethod"); 
var methodInstance = genericMethod.MakeGenericMethod(objectType); 
methodInstance.Invoke(someInstance, null); 
3

这是可能的,但它的丑陋:

var method = typeof (someClass).GetMethod("someGenericMethod").MakeGenericMethod(objectType); 
method.Invoke(this, null); 
+0

我无法想象这是表现友好的,对吗? –

+0

@Matthew,最初的Reflection调用找到方法很慢,但动态Invoke不应该太差(说起来有趣;实际上并没有量化这些估计值)。您可以加快Invoke部分(如果您需要调用频繁调用)通过使用Delegate.CreateDelegate(在这种情况下不太难,因为类型参数不用于返回值或任何参数)。如果使用类型参数,则会产生更多复杂性(可以解决此问题如果你真的想用DynamicMethod和Emit。) –