zoukankan      html  css  js  c++  java
  • [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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请联系我,非常感谢。
  • 相关阅读:
    项目Beta冲刺(团队) --1/7
    Beta:凡事预则立
    事后诸葛亮(葫芦娃队)
    项目问题回复
    Alpha冲刺阶段总结
    Alpha冲刺笔记十:第十天
    Alpha冲刺随笔九:第九天
    项目测试用例
    Alpha冲刺随笔八:第八天
    项目Beta冲刺(团队2/7)
  • 原文地址:https://www.cnblogs.com/ColdJokeLife/p/3116655.html
Copyright © 2011-2022 走看看