我有一个方法:
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
不是正确的选择。