zoukankan      html  css  js  c++  java
  • 自己动手重新实现LINQ to Objects: 6 Repeat

    本文翻译自Jon Skeet的系列博文“Edulinq”。

    本篇原文地址:

    http://msmvps.com/blogs/jon_skeet/archive/2010/12/24/reimplementing-linq-to-objects-part-6-repeat.aspx 


    本文的主题是个无关紧要的方法,Repeat。关于Repeat,值得讨论的内容比Empty还要少。写这篇博文只是为了保证这个系列的完整性。


    Repeat是什么?


    Repeat是一个静态的泛型方法,不是扩展方法,它只有一个签名形式:


    public
     static IEnumerable<TResult> Repeat<TResult>( 

        TResult element, 

        int count)


    它返回一个序列,该序列中反复的包含“count”个指定的元素,。Repeat只需要一个参数校验:检验“count”不是负数。


    我们要测试什么呢?


    需要测试的东西真的不多。我只想到了四个场景:
     

    一个简单的测试,把一个字符串重复三次

    一个空序列(把一个元素重复0次)

    一个多次包含null的序列(仅仅是为了证明“element”可以为null

    用负数作为“count”来证明参数校验会被执行,而且是立即执行的


    以上这几点恐怕都不怎么令人兴起。


    来动手实现吧!


    在实现的时候我们唯一有可能做错的事就是把参数校验的代码和迭代器代码块写到一起。不过我们已经多次的做过“分割实现”了,所以我们肯定不会犯这个错误的。下面的代码就是乏善可陈的Repeat方法的全部了:


    public
     static IEnumerable<TResult> Repeat<TResult>(TResult element, int count) 

        if (count < 0

        { 

            throw new ArgumentOutOfRangeException("count"); 

        } 

        return RepeatImpl(element, count); 

    private static IEnumerable<TResult> RepeatImpl<TResult>(TResult element, int count) 

        for (int i = 0; i < count; i++) 

        { 

            yield return element; 

        } 

    }


    这就是今天的全部内容了。其中值得指出的部分就是...没有什么值得指出的。


    结论


    其实没有什么结论可写。下一次我们讲CountLongCount,那里面倒是有些有趣的东西可以细说。
     

  • 相关阅读:
    JZYZOJ1311 邮局设置问题 dp
    备忘录和乱七八糟的体会
    Python strip、lstrip和rstrip的用法
    Linux jstack命令详解
    Linux EOF使用
    Linux 千万不要执行的10个命令
    Linux 浅谈Linux 操作系统的安全设置
    linux 使用 ionice 限制 Xen 虚拟机磁盘 IO
    Linux 实现rsyslog日志里面的IP地址记录 未测试
    linux 回收站的添加
  • 原文地址:https://www.cnblogs.com/cuipengfei/p/2152593.html
Copyright © 2011-2022 走看看