0

我有以下简单的功能:

private static Nullable<T> CastValue<T>(object val)
 where T : struct
{
    if (!(val is DBNull))
    {
        return (T) val;
    }
    return null;
}

我想在迭代数据表的行/列时调用它,如下所示:

var table = CreateTable();
foreach (DataRow row in table.Rows)
{
    foreach (DataColumn column in table.Columns)
    {
        Type type = column.DataType;
        CastValue<type>(row[column]);
    }
}

但是,我收到以下错误:

找不到类型或命名空间名称“type”(您是否缺少 using 指令或程序集引用?)

有没有办法使用在运行时确定的泛型参数调用泛型函数?

4

2 回答 2

1

你不能1因为泛型参数是在编译时解析的,而列的类型只会在运行时知道。

由于您没有对结果任何事情,因此CastValue不清楚您要完成什么,但是应该不需要强制转换,因为row[column]应该已经是列数据类型的实例。


1您可以进行反思,但我看不出它对您的情况有何帮助。

于 2012-12-11T22:20:42.057 回答
1

我认为您需要制作该函数的非通用版本。如果您考虑一下,如果您传入了错误的类型,它将最终导致运行时错误,因此通过泛型化您不会得到任何东西。

于 2012-12-11T22:21:34.237 回答