我之前在重构一些代码时,发现了一个迭代器块的实现,我对此不太确定。在系统的集成层中,客户端调用外部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
};
}
}
我的问题是:这是否是迭代器块的有效用法?我看不出以这种方式创建翻译器类的好处。这样做会导致一些意外行为吗?