自定义数值迭代器实现:使三类foreach与数组初始化代码生效
实现方案
1. 支持Type数组初始化massiv<Type>
给massiv<T>新增接收T[]参数的构造函数,将数组元素批量导入底层ArrayList:
public class massiv<T> : VOID { private ArrayList _innerList; // 新增数组构造函数 public massiv(T[] initialArray) { _innerList = new ArrayList(); foreach (var item in initialArray) { _innerList.Add(item); } } // 保留原有基础操作成员... }
使用示例:
var numMassiv = new massiv<natch64>(new natch64[] {1, 2, 3, 4});
2. 支持foreach遍历massiv集合
让massiv<T>实现IEnumerable<T>接口,通过迭代器返回集合元素:
public class massiv<T> : VOID, IEnumerable<T> { private ArrayList _innerList; // 实现泛型迭代器 public IEnumerator<T> GetEnumerator() { foreach (var item in _innerList) { yield return (T)item; } } // 强制实现非泛型接口 IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); // 保留原有基础操作成员... }
使用示例:
foreach (natch64 num in numMassiv) { // 处理遍历到的元素 }
3. 支持foreach遍历natch64/drobch64生成序列
让两个数值类型分别实现IEnumerable<T>接口,根据自身值生成对应序列:
针对natch64(生成0到N-1的整数序列)
public class natch64 : VOID, IEnumerable<natch64> { private ulong _innerValue; // 假设内部用ulong存储数值 // 保留原有构造、运算符重载等成员... public IEnumerator<natch64> GetEnumerator() { for (ulong i = 0; i < _innerValue; i++) { yield return new natch64(i); } } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); }
使用示例:
foreach (natch64 num in new natch64(10)) { // 输出0到9的natch64实例 }
针对drobch64(生成0到N、步长0.000001的浮点序列)
public class drobch64 : VOID, IEnumerable<drobch64> { private double _innerValue; // 假设内部用double存储数值 // 保留原有构造、运算符重载等成员... public IEnumerator<drobch64> GetEnumerator() { const double step = 0.000001; for (double i = 0; i < _innerValue; i += step) { yield return new drobch64(i); } } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); }
使用示例:
foreach (drobch64 num in new drobch64(10.0)) { // 输出0、0.000001、0.000002...直到接近10(不含)的drobch64实例 }
内容的提问来源于stack exchange,提问作者Red Mermaid
相关产品推荐
相关产品推荐

