如何在运行时转换传递给函数的参数?
private object PopulateObject(object dataObj, System.Data.DataRow dataRow, string query)
{
object = DataAccess.Retriever.RetrieveArray<dataObj.GetType()>(query);
我想知道如何在运行时在类型声明中获取dataObj.GetType()。
答案 0 :(得分:8)
尝试这样的事情:
private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow, string query)
{
dataObj = DataAccess.Retriever.RetrieveArray<T>(query);
}
这将允许您避免此方法中的任何反射,因为提供给PopulateObject
的类型参数也将是RetrieveArray
的类型参数。通过调用此方法,编译器将能够推断T
的类型,从而允许您避免编写运行时类型检查。
答案 1 :(得分:0)
你不能这样做,因为变量声明发生在编译时,而不是运行时。您应该创建一个通用方法。
private T PopulateObject<T>(T dataObj, DataRow dataRow, String query)
{
return DataAccess.Retriever.RetrieveArray<T>(query);
}
答案 2 :(得分:0)
您想知道如何在运行时设置泛型类型参数吗?
你需要反思 - MakeGenericMethod
注意:当可以在编译时确定Type时,使用类型参数重写它。
private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow, string query)
{
dataObj = DataAccess.Retriever.RetrieveArray<T>(query);
}