如何在運行時投射傳遞給函數的參數?動態鑄造
private object PopulateObject(object dataObj, System.Data.DataRow dataRow, string query)
{
object = DataAccess.Retriever.RetrieveArray<dataObj.GetType()>(query);
我想知道如何在運行時的類型聲明中獲取dataObj.GetType()。
如何在運行時投射傳遞給函數的參數?動態鑄造
private object PopulateObject(object dataObj, System.Data.DataRow dataRow, string query)
{
object = DataAccess.Retriever.RetrieveArray<dataObj.GetType()>(query);
我想知道如何在運行時的類型聲明中獲取dataObj.GetType()。
嘗試這樣:
private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow, string query)
{
dataObj = DataAccess.Retriever.RetrieveArray<T>(query);
}
這將讓你避免這種方法提供給PopulateObject
也將是RetrieveArray
類型參數的類型參數的任何反映。通過調用此方法,編譯器將能夠推斷出T
的類型,從而避免編寫運行時類型檢查。
你不能這樣做,因爲變量聲明發生在編譯時,而不是運行時。你應該創建一個通用的方法。
private T PopulateObject<T>(T dataObj, DataRow dataRow, String query)
{
return DataAccess.Retriever.RetrieveArray<T>(query);
}
您想知道如何在運行時設置泛型類型參數嗎?
你需要在這裏思考 - MakeGenericMethod
注意:如果在編譯時確定的類型,重寫這個使用類型參數。
private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow, string query)
{
dataObj = DataAccess.Retriever.RetrieveArray<T>(query);
}
通用方法FTW! – Randolpho 2009-05-26 14:27:09