[C# 基础知识系列] —— Enumerable.Range

前言:

今天无意间发现C#中提供Enumerable.Range这个功能,觉得很方便,它可以生成指定范围内的整数的序列。

那么我们再也不用new int[]了。

使用方法如下:

foreach(var i in Enumerable.Range(0,10))

{

  Console.WriteLine(i);

}

所以我想研究一下这个东西,看看是如何实现的,找找可以学习借鉴的地方。

 

一、分析源码

public static IEnumerable<int> Range(int start, int count)
{
      long num = (long) start + (long) count - 1L;
      if (count < 0 || num > (long) int.MaxValue)
        throw Error.ArgumentOutOfRange("count");
      else
        return Enumerable.RangeIterator(start, count);
}
private static IEnumerable<int> RangeIterator(int start, int count) { for (int i = 0; i < count; ++i) yield return start + i; }

从上面,可以看出只是使用yield return来返回一个IEnumerable<int>的函数而已。

 

二、写我们自己的DataRange

我们可以先写一个时间日期的DateRange,用上面类似的方式,写一个静态函数:

代码如下:

// implementation
public static System.Collections.Generic.IEnumerable<DateTime> DateRange(DateTime begin, DateTime end)
{
      for (var iterator = begin; iterator <= end; iterator = iterator.AddDays(1))
       {
            yield return iterator;
       }
}
// usage
foreach (var date in DateRange(DateTime.Now.Date,DateTime.Now.Date.AddDays(5).AddHours(3)))
{
        Console.WriteLine(date.ToLocalTime());
}

 

 

posted @ 2013-06-04 10:38  大海向西流  阅读(3887)  评论(0编辑  收藏  举报