列表到异步方法中的IEnumerable



我有一个方法:

public Task<IEnumerable<MyDetails>> HandleAsync(...)

在这个方法中,我只需构建一个项目列表。

IEnumerable<MyDetails> myDetails = new List<MyDetails> {
new MyDetails{ Name = 'John' },
new MyDetails{ Name = 'James' },
new MyDetails{ Name = 'Anne' },
};

然后返回结果。

return Task.FromResult(insuraceTypeDetails);

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

然而,当我尝试这样做时,我在返回时遇到了一个错误:

无法转换类型"线程"。任务。任务<列表>到线程。任务。任务<IEnumerable>

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

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

var将从初始化中推断变量的类型,在这种情况下转换为List<MyDetails>。但是,正如您所发现的,您需要变量为IEnumerable<MyDetails>才能匹配返回类型。

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

return Task.FromResult(insuraceTypeDetails.AsEnumerable());

或者执行显式强制转换:

return Task.FromResult((IEnumbrable<MyDetails>)insuraceTypeDetails);

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

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

最新更新