【发布时间】:2012-03-03 03:44:21
【问题描述】:
我之前正在重构一些代码,但遇到了一个我不太确定的迭代器块的实现。在客户端为某些数据调用外部 API 的系统集成层中,我有一组转换器,它们获取从 API 返回的数据并将其转换为逻辑层中使用的业务实体的集合。一个常见的翻译器类将如下所示:
// translate a collection of entities coming back from an extrernal source into business entities
public static IEnumerable<MyBusinessEnt> Translate(IEnumerable<My3rdPartyEnt> ents) {
// for each 3rd party ent, create business ent and return collection
return from ent in ents
select new MyBusinessEnt {
Id = ent.Id,
Code = ent.Code
};
}
今天我遇到了以下代码。同样,它是一个翻译器类,其目的是将参数中的集合翻译为方法返回类型。但是,这次是一个迭代器块:
// same implementation of a translator but as an iterator block
public static IEnumerable<MyBusinessEnt> Translate(IEnumerable<My3rdPartyEnt> ents) {
foreach(var ent in ents)
{
yield return new MyBusinessEnt {
Id = ent.Id,
Code = ent.Code
};
}
}
我的问题是:这是对迭代器块的有效使用吗?我看不到以这种方式创建翻译类的好处。这会导致一些意想不到的行为吗?
【问题讨论】:
-
对我来说似乎完全有效 - 它提供了两个实体之间的编译安全翻译。它有什么问题?