gpt4 book ai didi

c# - 异步编程的类型转换错误

转载 作者:太空宇宙 更新时间:2023-11-03 17:12:14 24 4
gpt4 key购买 nike

谁能告诉我为什么这不起作用?

我有一个看起来像这样的方法:

public virtual async Task<IList<User>> GetAll()
{
return this.db.Users.Where(model => model.CompanyId.Equals(this.companyId, StringComparison.OrdinalIgnoreCase)).ToListAsync();
}

当我尝试编译我的代码时,我收到一条错误消息:

Error 10 Cannot implicitly convert type 'System.Threading.Tasks.Task>' to 'System.Collections.Generic.IList'. An explicit conversion exists (are you missing a cast?) C:\Users\Jaymie\Documents\GitHub\Skipstone\Skipstone.Web\Repositories\UserRepository.cs 70 20 Skipstone.Web

然而在它的正下方我有这个方法:

public Task<User> FindByIdAsync(string userId)
{
return this.db.Users.Where(model => model.Id.Equals(userId, StringComparison.OrdinalIgnoreCase)).SingleOrDefaultAsync();
}

效果很好。

我觉得我只见树木不见森林所以需要别人的眼睛来帮助我:)

最佳答案

ToListAsync方法返回 Task<List<T>>对象,转换为 Task<List<User>> object 在你的情况下,但你的方法的返回类型是 Task<IList<User>> .

这里的问题是 T 不支持协方差在 Task<T> .

因此,要么将方法的返回类型更改为 Task<List<User>> ,或者您自己编写代码来进行转换:

return this.db.Users
.Where(model => model.Id.Equals(userId, StringComparison.OrdinalIgnoreCase))
.ToListAsync()
.ContinueWith<IList<User>>(t => t.Result, TaskContinuationOptions.ExecuteSynchronously);

关于c# - 异步编程的类型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20950908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com