2009-05-26 127 views
2

如何在運行時投射傳遞給函數的參數?動態鑄造

private object PopulateObject(object dataObj, System.Data.DataRow dataRow, string query) 
{ 


    object = DataAccess.Retriever.RetrieveArray<dataObj.GetType()>(query); 

我想知道如何在運行時的類型聲明中獲取dataObj.GetType()。

回答

8

嘗試這樣:

private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow, string query) 
{ 
    dataObj = DataAccess.Retriever.RetrieveArray<T>(query); 
} 

這將讓你避免這種方法提供給PopulateObject也將是RetrieveArray類型參數的類型參數的任何反映。通過調用此方法,編譯器將能夠推斷出T的類型,從而避免編寫運行時類型檢查。

+0

通用方法FTW! – Randolpho 2009-05-26 14:27:09

0

你不能這樣做,因爲變量聲明發生在編譯時,而不是運行時。你應該創建一個通用的方法。

private T PopulateObject<T>(T dataObj, DataRow dataRow, String query) 
{ 
    return DataAccess.Retriever.RetrieveArray<T>(query); 
} 
0

您想知道如何在運行時設置泛型類型參數嗎?

你需要在這裏思考 - MakeGenericMethod

注意:如果在編譯時確定的類型,重寫這個使用類型參數。

private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow, string query) 
{ 
    dataObj = DataAccess.Retriever.RetrieveArray<T>(query); 
}