目前我正在使用其他人的代码.这不是我第一次看到这样的事情:
public async MyMethod Task<IEnumerable<MyResult>> FindResults()
{
// some code here
var ret = await repository.BusinessObjects.ToListAsync()
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:在MyMethod返回类型中使用IEnumerable是不是适得其反,因为结果已经枚举,并且最好保持这种方式?使用List不是更好吗?
(我想它也适用于非异步操作,但我决定以我在代码中看到的方式显示这个以防万一)
从技术上讲,以这种方式编写代码没有问题.在上面的特定代码示例中,如果要返回List<>实例但方法的返回类型是(技术上)并不重要IEnumerable<>.没有性能损失,实际返回的类型仍然是List<>.
据说这不是好习惯.有一个设计指南,声明你应该构造你的方法,以便始终返回尽可能最具体的类型并接受最通用/抽象类型(当然,在限制范围内,你不应该将对象作为每个方法的参数).
请参阅本文标题为" 返回最具体的类型",接受 Vladimir Khorikov 最常用的类型作为参考.之前也问过这个问题,请参阅从动作方法返回最具体或最常用的类型是否更好?.
所以这意味着以下2个签名将是良好的做法(使用您的示例),假设第一个签名a List<MyResult>是实际返回的类型,而在第二个示例中,无论做什么更新只需要迭代输入.
public async Task<List<MyResult>> FindResultsAsync();
public async Task UpdateAsync(IEnumerable<MyResult> itemsForUpdate);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5286 次 |
| 最近记录: |