2014-05-12 139 views
0

我有我想要調用的對象的泛型方法。但是那一刻我不知道T,我所知道的是T的類型,它被設置爲對象的屬性。將類型傳遞給Type對象確定的泛型方法

public calass SomeClass{ 

    public Type SomeType { get; set; } 

    public void SomeMethod<T>(){ 

    }  
} 

...

var instance = new SomeClass(); 

...

是否有可能做這樣的事情?

instance.SomeMethod<SomeType>(); 

回答

2

是的,你可以使用Reflection:

var method = instance.GetType().GetMethod("SomeMethod") 
      .MakeGenericMethod(instance.SomeType); 

method.Invoke(instance); 

稱之爲還要注意的是SomeType是你的財產的名稱,而不是你的property.You的類型需要,當你想指定類型調用一個通用的方法。

+0

你的人,感謝 – eomeroff

0

您可以的someMethod <牛逼>添加以下檢查:

if (!SomeType.IsAssignableFrom(typeof(T))) throw new Exception("Expecting type stored in SomeType."); 

或將我的類更改爲模板:

public class SomeClass<T> 
{ 
    public Type InstanceType { get { return typeof(T); } } 

    public void SomeMethod<T>() { } 
} 
相關問題