动态铸造

时间:2009-05-26 14:24:11

标签: c# casting

如何在运行时转换传递给函数的参数?

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


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

我想知道如何在运行时在类型声明中获取dataObj.GetType()。

3 个答案:

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