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,很抱歉,我错过了类型不匹配。添加显式类型可以解决此问题。