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);
}
我有这样的方法:
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);
}