c#-foreach的秘密
foreach的秘密
class Program
{
static void Main(string[] args)
{
//创建Person的对象
Person p1=new Person();
//遍历p1因为实现了IEnumerable接口
foreach (var item in p1)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
//实现了Ienumerable接口就可以遍历对象了
//实现IIndextor因为EnumeratorIndex是泛型类需要实现IIndextor接口
public class Person:IEnumerable,IIndextor
{
public string[] strs = new string[6];
public string this[int Index]
{
get { return strs[Index]; }
set { strs[Index] = value; }
}
public Person()
{
strs[0] = "3sfgew";
strs[1] = "322";
strs[2] = "34";
strs[3] = "3434";
strs[4] = "3ww";
strs[5] = "3sdfe";
}
public IEnumerator GetEnumerator()
{
//返回Ienumerator的实现类
return new EnumeratorIndex<Person>(this);
}
public int IndexLength
{
get { return strs.Length; }
}
}
//定义索引器的接口
public interface IIndextor
{
string this[int Index] { get; }
int IndexLength { get; }
}
public class EnumeratorIndex<T> : IEnumerator where T:IIndextor
{
T p1;
int Index;
//构造函数
public EnumeratorIndex(T p1)
{
//给必须的对象赋值
//Index的初始值必须是-1
Index = -1;
this.p1 = p1;
}
//返回当前的对象
public object Current
{
get { return p1[Index]; }
}
//使索引前进到下一个
public bool MoveNext()
{
if (Index < p1.IndexLength - 1)
{
Index++;
return true;
}
else
{
return false;
}
}
//初始化索引
public void Reset()
{
Index = -1;
}
}
c#-foreach的秘密的更多相关文章
- C#秘密武器之扩展方法
原文:C#秘密武器之扩展方法 为何要用扩展方法? 作为一个.NET程序猿,我们经常要跟.net自带类库或者第三方dll类库打交道,有时候我们未必能够通过反编译来查看它们的代码,但是我们通常需要给它们扩 ...
- Siki_Unity_2-7_Stealth秘密行动
Unity 2-7 Stealth秘密行动 Abstract:向量运算:Animation动画:Navigation寻路系统:Mecanim动画系统 任务1&2&3:游戏介绍 & ...
- ES5中新增的forEach等新方法的一些使用声明
转载地址:http://www.zhangxinxu.com/wordpress/?p=3220 一.前言-索引 ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块, ...
- 先说IEnumerable,我们每天用的foreach你真的懂它吗?
我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...
- TypeScript: Angular 2 的秘密武器(译)
本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...
- 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密
0x00 前言 在匹夫的上一篇文章<匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置>的最后,匹夫以总结和后记的方式涉及到一部分迭代器的知识.但是觉得还是不够过瘾,很多需要说清楚 ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密
string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...
- 网站的SEO以及它和站长工具的之间秘密
博客迁移没有注意 URL 地址的变化,导致百度和 google 这两只爬虫引擎短时间内找不到路.近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具,说下感受. 百度的站长工具 ...
随机推荐
- CPU制造全过程(图文全解)
沙子:硅是地壳内第二丰富的元素,而脱氧后的沙子(尤其是石英)最多包含25%的硅元素,以二氧化硅(SiO2)的形式存在,这也是半导体制造产业的基础. 硅熔炼:12英寸/300毫米晶圆级.通过 ...
- Kubernetes权威指南学习笔记(一)
https://blog.csdn.net/keysilence1/article/details/70239717 概念 Kubernetes是谷歌严格保密十几年的秘密武器——Borg的一个开源版本 ...
- 4.SVM
- string[] 转换为 int[]
string[] ke=...... int[] output = Array.ConvertAll<string, int>(ke,delegate (string s) { retur ...
- 三种timer控件的简单实例
.system.windows.forms .system.threading.timer .system.timers.timer using System; using System.Collec ...
- LeetCode268.缺失数字
268.缺失数字 描述 给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 示例 1: 输入: [3,0,1] 输出: 2 示例 ...
- BZOJ - 1257 分块 详解
中文题面 这道题就是LightOJ某题的升级版 前段时间我是直接用√k前暴力后分块的处理方式,然后直接套个等差求和 这次看到了dalao的证明再次让我知道我好菜啊 在这里做下笔记,学习一下对于整除运算 ...
- AngularJS 中ng-model通过$watch动态取值
这个例子的意思是,当xxxx的长度不超过6时,xxxx和yyyy两个input的model是无关的,但当xxxx超过6,则yyyy会跟随其值而变化. 另一种做法是在input的ng-model后面添加 ...
- 坐标&接龙型动态规划 - 20181026
109. Triangle 此题还可以用DFS,记忆化搜索去做,二刷实现 public class Solution { /** * @param triangle: a list of lists ...
- 升级TeeChart pro
teechart 安装流程如下: 1. 将生成的 LIB中的 选中文件copy到C:\Users\Public\Documents\RAD Studio\8.0\Dcp 图1 1. fastrep ...