鉴于此代码:
IEnumerable<object> FilteredList() { foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) yield return item; } }
为什么我不应该这样编码?:
IEnumerable<object> FilteredList() { var list = new List<object>(); foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) list.Add(item); } return list; }
我有点理解yield关键字的作用。它告诉编译器构建某种东西(迭代器)。但为什么要使用它?除了代码稍微少一点之外,它对我有什么用?
yield
使用yield会使集合变得 懒惰。
假设您只需要前五个项目。按照您的方式,我必须遍历 整个列表 才能获得前五个项目。使用yield,我只遍历前五个项目。