无法隐式转换类型' System.Collections.Generic.List<>'到' System.Threading.Tasks.Task<>>

时间:2016-07-26 00:28:49

标签: c# async-await

我得到一个例外。

  

无法隐式将'System.Collections.Generic.List<IntegraPay.Domain.SObjects.Industry>'类型转换为'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<IntegraPay.Domain.SObjects.Industry>>'

以下是我的财产和方法。

  private List<WebFormFieldContent> WebFormFields { get; set; } = 
       new List<WebFormFieldContent>();

  Task<IEnumerable<WebFormFieldContent>> IRegistrationRepository.GetWebFormFields()
        {
            return WebFormFields;
        }

2 个答案:

答案 0 :(得分:10)

当您在方法声明中缺少async时,通常会发生此错误。

当您将async放入签名时,C#编译器会添加&#34; magic&#34;从对象转换为返回该对象的Task<T>

但是,在您的情况下async是不必要的,因为您返回的任务包含您已有的结果:

return Task.FromResult<IEnumerable<WebFormFieldContent>>(
    WebFormFields
);

答案 1 :(得分:2)

您的方法返回类型是

Task<IEnumerable<WebFormFieldContent>> 

但实现返回

List<WebFormFieldContent>. 

您可以将其更改为

Task<List<WebFormFieldContent>> IRegistrationRepository.GetWebFormFields()
    {
        return Task.FromResult(WebFormFields);
    }

或将私有变量更改为

IEnumerable<WebFormFieldContent> WebFormFields { get; set; } = 
   new List<WebFormFieldContent>();

类型。

或者您可以添加异步关键字以使其成为同步调用

async Task<IEnumerable<WebFormFieldContent>> IRegistrationRepository.GetWebFormFields()
    {
        return WebFormFields;
    }