假设有这样一个需求:在一个数据源(下面代码arry)中把其中大于4的数据取出来遍历到前台,怎么做?(不使用linq)
- var arry = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
第一种情况: 不使用yield的情况下(一般人应该都是这样用的)
- /// <summary>
- /// 没有使用yield
- /// </summary>
- public static IEnumerable<int> FilterWithOutYield
- {
- get
- {
- var result = new List<int>();
- foreach (var i in arry)
- {
- if (i > 4)
- result.Add(i);
- }
- return result;
- }
- }
第二种情况, 代码如下;
- /// <summary>
- /// 使用yield
- /// </summary>
- public static IEnumerable<int> FilterUseYield
- {
- get
- {
- foreach (var i in arry)
- {
- if (i > 4)
- yield return i;
- }
- }
- }
yield使用场景:在一些特定的数据源里二次条件过滤时,不用再定义一个中间集合去存储,只需yield return 变量值,前台遍历调用遍历输出即可。