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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请联系我,非常感谢。
  • 相关阅读:
    Spring URL重写
    DOUBLE精度问题
    激光推送一
    log4j打印debug日志问题
    dpkg:处理 xxx (--configure)时出错解决办法,也可用于卸载软件出错的情况
    Ubuntu中配置tomcat
    Ubuntu16.04安装Eclipse
    删除mysql数据库后django重建数据库
    MySQL修改root密码
    django1.9和mysql
  • 原文地址:https://www.cnblogs.com/ColdJokeLife/p/3116655.html
Copyright © 2011-2022 走看看