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はできません。

何を達成しようとしているのかは不明ですが、すでに列のデータ型のインスタンスになっているはずなので、キャストは不要ですCastValuerow[column]


1リフレクションでできますが、それがあなたの状況にどのように役立つかわかりません。

于 2012-12-11T22:20:42.057 に答える
1

関数の汎用バージョンを作成する必要があると思います。考えてみれば、間違った型を渡すと実行時エラーになってしまうので、ジェネリックにしても何も得られない。

于 2012-12-11T22:21:34.237 に答える