[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()); }
作者:ColdJokeLife
出处:http://www.cnblogs.com/ColdJokeLife/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请联系我,非常感谢。
出处:http://www.cnblogs.com/ColdJokeLife/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请联系我,非常感谢。