我有一些用C#编写的代码。我正在尝试编写一些通用代码,以便可以重复使用。我的实际代码更加复杂。不过,需要处理的代码看起来像下面这样:
public async Task<T> ExecuteQueryAsync<T>(string sql)
{
var results = default(T);
using (var database = new SqlConnection("[ConnectionString]"))
{
database.Open();
results = await database.QueryAsync<T>(sql);
}
return results;
}
当我构建我的项目时,出现一个编译时错误,错误信息如下:
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<T>' to 'T'. An explicit conversion exists (are you missing a cast?)
我不完全理解为什么会出现这个错误。我打算以以下方式进行调用:
Adapter adapter = new Adapter();
var results = await adapter.ExecuteQueryAsync<IEnumerable<Customer>>("SELECT * FROM Customer");
在上述情况下,
T
不应该是一个 IEnumerable<T>
吗?如果是这样,我不明白为什么在编译时会出现类型转换错误。谢谢!
results
的类型是 T,而database.QueryAsync<T>(sql)
返回的类型是IEnumerable<T>
。只需将结果类型更改为IEnumerable<T>
,我认为这才是您真正想要的。默认值与您的问题无关。 - Andrey