C#通过generic作为参数

时间:2017-08-10 10:08:06

标签: c# generics pass-through

我有一个这样的方法:

private Contact GetContactFromDbReaderWithSingleResult(DbDataReader dbReader)
{
    if (dbReader.HasRows)
    {
        return new DataReaderReflection().DataReaderToEntity<Contact>(dbReader)[0];
    }

    return null;
}

然后我可以有一个非常相似的方法:

private Email GetEmailFromDbReaderWithSingleResult(DbDataReader dbReader)
{
    if (dbReader.HasRows)
    {
        return new DataReaderReflection().DataReaderToEntity<Email>(dbReader)[0];
    }

    return null;
}

DataReaderToEntity-Method的签名是:

public List<T> DataReaderToEntity<T>(IDataReader dr) where T : new()

现在我想创建一个通用变体GetGenericEntityFromDbReaderWithSingleResullt

我的方法看起来像这样,但这不正确:

private object? GetEntityFromDbReaderWithSingleResult<T>(DbDataReader dbReader)
{
    if (dbReader.HasRows)
    {
        return new DataReaderReflection().DataReaderToEntity<typeof(T)>(dbReader)[0];
    }

    return null;
}

虽然仍在学习处理仿制药...... 我做错了什么?

提前感谢!

1 个答案:

答案 0 :(得分:4)

将您的返回类型更改为T而不是对象,并删除typeof:

private T GetEntityFromDbReaderWithSingleResult<T>(DbDataReader dbReader) where T : new()
{
    if (dbReader.HasRows)
    {
        return new DataReaderReflection().DataReaderToEntity<T>(dbReader)[0];
    }

    return default(T);
}
相关问题