2013-10-17 33 views
0

我有要求在c#中使用反射調用函數。 以下代碼適用於返回數據類型爲sqldatareader的函數。動態地使用c#中的反射動態地包含返回類型?

public override void Testmethod() 
    { 
     SqlDataReader Reader = (SqlDataReader)method.Invoke(Activator.CreateInstance(type),new object[] {arr}); 
    } 

但現在我需要提及返回類型也動態和取決於我需要調用該函數。

我怎樣才能動態地指定返回類型?

+0

'method.ReturnType' –

+0

無法正常工作。得到錯誤無法找到類型或名稱空間名稱'returnType' –

回答

1

您可以通過

Type returnType = method.ReturnType; 

獲得方法的返回類型,那麼你可以比較的類型,調用需要的方法,並將其轉換的返回類型在編譯時已知的類型(在本例,SqlDataReader

if (returnType == typeof(SqlDataReader)) 
{ 
    SqlDataReader Reader = (SqlDataReader)method.Invoke(Activator.CreateInstance(type),new object[] {arr}); 
} 

執行相同的其他情況

else if (returnType == typeof(string)) 
{ 
    // invoke some other method and convert it's return type to a string ... 
} 
+0

我試過'Type returnType = method.ReturnType; SqlDataReader Reader =(returnType)method.Invoke(Activator.CreateInstance(type),new object [] {arr});'getting error無法找到類型或名稱空間名稱'returnType' –

+1

@ user833985您無法轉換爲編譯時未知的類型。您可以使用'returnType'來測試它是否與編譯時已知的類型匹配並轉換爲該類型。用一個例子更新我的答案 –