我有一个方法:
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 吗?或者我是否正确明确地告诉编译器我们需要什么?
在代码审查中,我被要求使用
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这里不是正确的选择。
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |