在异步方法中列出到 IEnumerable

Cra*_*aig 0 c#

我有一个方法:

public Task<IEnumerable<MyDetails>> HandleAsync(...)
Run Code Online (Sandbox Code Playgroud)

在此方法中,我只是构建了一个项目列表。

IEnumerable<MyDetails> myDetails = new List<MyDetails> {
                new MyDetails{ Name = 'John' },
                new MyDetails{ Name = 'James' },
                new MyDetails{ Name = 'Anne' },
            };
Run Code Online (Sandbox Code Playgroud)

然后返回结果。

return Task.FromResult(insuraceTypeDetails);
Run Code Online (Sandbox Code Playgroud)

在代码审查中,我被要求使用var而不是IEnumerable<MyDetails>

但是,尝试这样做时,我在返回时收到错误消息:

无法将类型 Threading.Tasks.Task<List> 转换为 Threading.Tasks.Task<IEnumerable>

我认为这没问题,但编译器不允许。我可以在这里使用 var 吗?或者我是否正确明确地告诉编译器我们需要什么?

D S*_*ley 5

在代码审查中,我被要求使用var而不是IEnumerable<MyDetails>

var将从初始化中推断变量的类型,在此强制转换为 a List<MyDetails>。但是正如您所发现的,您需要将变量设为 anIEnumerable<MyDetails>以匹配返回类型。

可以做一些愚蠢的事情,比如将它转换为IEnumerable

return Task.FromResult(insuraceTypeDetails.AsEnumerable());
Run Code Online (Sandbox Code Playgroud)

或者做一个明确的演员:

return Task.FromResult((IEnumbrable<MyDetails>)insuraceTypeDetails);
Run Code Online (Sandbox Code Playgroud)

但那些只是围绕教条式的编码风格工作。显式声明变量类型绝对没有错,尤其是当使用推断类型不起作用时。

使用IEnumerable<MyDetails>并向您的同事解释为什么var这里不是正确的选择。