C# 传递泛型作为参数

C# pass through generic as parameter

我有这样的方法:

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;
}

虽然仍在学习处理泛型... 我做错了什么?

提前致谢!

将您的 return 类型从 object 改为 T 并删除 typeof:

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

    return default(T);
}