2011-11-28 97 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。) –