指定泛型函数的类型

时间:2012-12-11 22:16:15

标签: c# .net generics

我有以下简单的功能:

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指令或程序集引用?)

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

2 个答案:

答案 0 :(得分:1)

你不能 1 因为泛型参数在编译时被解析,而列的类型只能在运行时被识别。

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


1 你可以反思,但我不知道它对你的情况有何帮助。

答案 1 :(得分:1)

我认为你需要制作一个非泛型版本的函数。如果你考虑一下,如果传入一个错误的类型,它将最终出现运行时错误,因此你不会通过这样做来获得任何东西。