繁体   English   中英

指定泛型函数的类型

[英]Specifying type for generic function

我有以下简单的功能:

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

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

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

因为你没有对CastValue的结果任何事情,所以你不清楚你想要完成什么,但是由于row[column]应该已经是列数据类型的一个实例,所以不需要CastValue


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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM