C# 无法隐式转换类型';System.Collections.Generic.List<&燃气轮机';至';System.Threading.Tasks.Task<&燃气轮机&燃气轮机;

C# 无法隐式转换类型';System.Collections.Generic.List<&燃气轮机';至';System.Threading.Tasks.Task<&燃气轮机&燃气轮机;,c#,async-await,C#,Async Await,我有个例外 无法将类型'System.Collections.Generic.List'隐式转换为'System.Threading.Tasks.Task' 下面是我的属性和方法 private List<WebFormFieldContent> WebFormFields { get; set; } = new List<WebFormFieldContent>(); Task<IEnumerable<WebFormFieldCon

我有个例外


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

下面是我的属性和方法

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

  Task<IEnumerable<WebFormFieldContent>> IRegistrationRepository.GetWebFormFields()
        {
            return WebFormFields;
        }
私有列表WebFormFields{get;set;}=
新列表();
任务IRegistrationRepository.GetWebFormFields()
{
返回WebFormFields;
}

此错误通常在方法声明中缺少
async
时发生

当您在签名中放入
async
时,C#compiler会添加“magic”来完成从对象到返回该对象的
任务的转换

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

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

您的方法返回类型为

Task<IEnumerable<WebFormFieldContent>> 
任务
但是实现返回了一个

List<WebFormFieldContent>. 
列表。
你可以把它改成

Task<List<WebFormFieldContent>> IRegistrationRepository.GetWebFormFields()
    {
        return Task.FromResult(WebFormFields);
    }
任务IRegistrationRepository.GetWebFormFields()
{
返回Task.FromResult(WebFormFields);
}
或者将私有变量更改为

IEnumerable<WebFormFieldContent> WebFormFields { get; set; } = 
   new List<WebFormFieldContent>();
IEnumerable WebFormFields{get;set;}=
新列表();
类型

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

async Task<IEnumerable<WebFormFieldContent>> IRegistrationRepository.GetWebFormFields()
    {
        return WebFormFields;
    }
异步任务IRegistrationRepository.GetWebFormFields() { 返回WebFormFields; }
为什么您希望此代码工作(以及您希望实现的具体目标)?为什么首先返回一个
任务
?转到异步或返回一个
IEnumerable
。我觉得在理解异步代码到底是什么方面有点欠缺。这是我的问题。为什么它不工作。您当前的示例与
string Foo(){return 42;}
基本相同,它将失败并出现相同的错误。。。很难理解你到底在寻找什么样的知识。您可能想了解
async
如何更改为方法生成的代码(即)。是,这是另一个选项。无法将类型“System.Threading.Tasks.Task”隐式转换为“System.Threading.Tasks.Task”@StephenZeng在编辑后应以同样的方式失败-您需要显式类型,如
Task.FromResult(WebFormFields)只有在方法中使用await和async时,它才能工作。如果删除它们,则无法将类型“System.Threading.Tasks.Task”隐式转换为“System.Threading.Tasks.Task”@maxspan,很抱歉,我错过了类型不匹配。添加显式类型可以解决此问题。