2014-06-29 103 views
1

我有這些類:調用泛型方法的類型

public static class A{ 
    ... 
    public C Run<T>(string something) 
    { 
     ... 
    } 
} 

public static class B{ 
    ... 
    public void Exec<T>(Type type) 
    { 
     MethodInfo method = typeof(A).GetMethod("Run"); 
     MethodInfo generic = method.MakeGenericMethod(type); 
     var result = generic.Invoke(null, new object[] { "just a string" }); 
     // bad call in next line 
     result.DoSomething(); 
    } 
} 


public class C{ 
    ... 
    public void DoSomething(){} 
} 

如何轉換結果呼叫DoSomething的方法類型?而使用類型變量調用泛型方法有多簡單?

回答

1

如何將結果轉換爲類型調用DoSomething方法?

由於代碼在編譯時不知道類型,並且對象已經是正確的類型,所以不能做到這一點。做到這一點在.NET 4.0和更高版本的一種方法是使用dynamic,而不是objectresult,就像這樣:

dynamic result = generic.Invoke(null, new object[] { "just a string" }); 
result.DoSomething(); // This will compile 

你可以像下面這樣做只是如果你是100%肯定,DoSomething()方法將在運行時在那裏。否則,運行時會出現異常,您需要捕獲並處理這些異常。

+0

好。使用'dynamic'是唯一的方法 –