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

max*_*pan 6 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;
        }
Run Code Online (Sandbox Code Playgroud)

das*_*ght 12

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

当您放入async签名时,C#编译器会添加"magic"来执行从对象到Task<T>返回该对象的转换.

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

return Task.FromResult<IEnumerable<WebFormFieldContent>>(
    WebFormFields
);
Run Code Online (Sandbox Code Playgroud)


Ste*_*eng 5

您的方法返回类型是

Task<IEnumerable<WebFormFieldContent>> 
Run Code Online (Sandbox Code Playgroud)

但实现返回一个

List<WebFormFieldContent>. 
Run Code Online (Sandbox Code Playgroud)

你可以将其更改为

Task<List<WebFormFieldContent>> IRegistrationRepository.GetWebFormFields()
    {
        return Task.FromResult(WebFormFields);
    }
Run Code Online (Sandbox Code Playgroud)

或者将私有变量更改为

IEnumerable<WebFormFieldContent> WebFormFields { get; set; } = 
   new List<WebFormFieldContent>();
Run Code Online (Sandbox Code Playgroud)

类型。

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

async Task<IEnumerable<WebFormFieldContent>> IRegistrationRepository.GetWebFormFields()
    {
        return WebFormFields;
    }
Run Code Online (Sandbox Code Playgroud)