2017-08-10 45 views
0

我有一个这样的方法:C#通过通用的参数

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-方法的签名是:

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

还在学习,虽然应对仿制药...... 我在做什么错?

提前致谢!

+0

它是'.DataReaderToEntity ()'' – Rabban

+0

DataReaderToEntity '应该只是'DataReaderToEntity '? – DavidG

+2

而方法返回类型应该只是'T',而不是'object''。 – HimBromBeere

回答

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); 
} 
+0

当返回类型为'T'时,不能返回'null' ... –

+0

已更新为返回类型T的默认值。 –

+0

@HimBromBeere T可能是一个值类型,但不能为空。 –