迭代范围值
来源:互联网 发布:传智播客java百度云盘 编辑:程序博客网 时间:2024/04/27 22:59
迭代需求:
范围值定义起始值和结束值;
防止反向范围,即起始值大于结束值;
必须能够把元素类型的一个值和另一个值进行比较;
能狗在范围值之中找出某个特定的值是否存在;
能够轻易迭代整个范围值;
namespace 迭代范围值1{ public abstract class Range<T>:IEnumerable<T> where T:IComparable<T> { readonly T start; readonly T end; public Range(T start,T end) { if(start.CompareTo(end)>0)//防止反向范围值;x.CompareTo(y)>0就等同于x>y { throw new ArgumentOutOfRangeException(); } this.start = start; this.end = end; } public T Start { get { return start; } } public T End { get { return end; } } public bool Contains(T value) { return value.CompareTo(start) >= 0 && value.CompareTo(end) <= 0; } public IEnumerator<T> GetEnumerator()//隐式实现GetEnumerator() { T value = start; while(value.CompareTo(end)<0) { yield return value; value = GetNextValue(value); } if(value.CompareTo(end)==0) { yield return value; } } IEnumerator IEnumerable.GetEnumerator()//显式实现GetEnumerator() { return GetEnumerator(); } protected abstract T GetNextValue(T current); }
从Range派生出的类,用于迭代日期/时间
设置步长;
public class DateTimeRange:Range<DateTime> { readonly TimeSpan step; public DateTimeRange(DateTime start,DateTime end):this(start,end,TimeSpan.FromDays(1))//使用默认的步长 { } public DateTimeRange(DateTime start,DateTime end,TimeSpan step):base(start,end)//使用指定的步长 { this.step = step; } protected override DateTime GetNextValue(DateTime current)//使用步长查找下一个值 { return current + step; } }
0 0
- 迭代范围值
- C#中采用迭代的方法获取素数,范围自定
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- 迭代
- Linkin大话Java和internet概念
- ejabberd中的访问规则配置
- App Store 审核指南(中文版)
- JPA注解 fetch
- 总结Cocos2d-x 3.0 中新字体标签Label
- 迭代范围值
- linux下ImageMagick和Jmagic的安装
- Cocos2d-X 学习笔记3 常用宏
- 使用libboost_filesystem.so库递归查找目录下的文件
- TCP和UDP区别
- 编程实现单链表的排序
- Android中Fragment的嵌套问题
- EditText中imeOptions属性使用及设置无效解决
- 如何设置Cisco交换机Vlan 并且监控特定网口的流量