动态铸造
问题描述:
如何在运行时投射传递给函数的参数?动态铸造
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