动态铸造

问题描述:

如何在运行时投射传递给函数的参数?动态铸造

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的类型,从而避免编写运行时类型检查。

+0

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

你不能这样做,因为变量声明发生在编译时,而不是运行时。你应该创建一个通用的方法。

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); 
}