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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请联系我,非常感谢。
  • 相关阅读:
    window.onload 、body.onload 以及 jQuery 等dom加载完成后执行脚本的区别
    HTML5事件-pageshow 和 pagehide
    动态加载script 和 link
    递归 recursive
    HTML5事件-自定义右键菜单
    left与margin-left区别
    偏移量、客户区、滚动大小
    屏幕适配
    KVC和KVO
    HUD总结
  • 原文地址:https://www.cnblogs.com/ColdJokeLife/p/3116655.html
Copyright © 2011-2022 走看看