数组可以使用foreach遍历数组,其实只要实现GetEnumertor方法的类型都可以使用foreach结构遍历数组。

首先看下代码:

    //笔类
public class Pencil
{
public string Color { get; set; } public int Num { get; set; }
} //笔盒类
public class PencilBox
{
private Pencil[] pencil = new Pencil[];//应该使用泛型,这里做演示 public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
}
}

如果想对PencilBox进行遍历呢?可枚举类型构建的两种方式(非泛型):实现IEnumerable接口、yield迭代器方法

实现IEnumerable接口

     public class PencilBox: IEnumerable//实现IEnumerable接口
{
private Pencil[] pencil = new Pencil[]; public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
} //实现GetEnumerator方法,
//这里System.Array已经实现了IEnumerable、IEnumerator接口可以简单委托请求道System.Array
public IEnumerator GetEnumerator()
{
return pencil.GetEnumerator();
}
}

yield迭代器方法

 public class PencilBox//不用实现IEnumerable接口
{
private Pencil[] pencil = new Pencil[]; public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
} //实现GetEnumeratore方法,返回值必须为IEnumerator
//使用yield return语法返回对象,yield关键字用来向调用方的foreach返回值
//当达到yield return语句后,当前位置存储起来,下次使用迭代器时会从该位置开始执行
public IEnumerator GetEnumerator()
{
foreach (Pencil pencil1 in pencil)
{
yield return pencil1;
}
}
}

yield 迭代器方法也可以实现可选择迭代,返回局部数据

   //笔盒类
public class PencilBox//不用实现IEnumerable接口
{
private Pencil[] pencil = new Pencil[]; public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
pencil[] = new Pencil() { Color = "Blue", Num = }; } //实现GetEnumeratore方法,返回值必须为IEnumerator
public IEnumerator GetEnumerator()
{
yield return pencil[];
yield return pencil[];
}
}

yield迭代器也可以带参数,当带参数时返回的是IEnumerable,而不是IEnumerator类型

 //笔盒类
public class PencilBox//不用实现IEnumerable接口
{
private Pencil[] pencil = new Pencil[]; public PencilBox()
{
pencil[] = new Pencil() { Color = "Red", Num = };
pencil[] = new Pencil() { Color = "Black", Num = };
pencil[] = new Pencil() { Color = "Blue", Num = }; } //可随意命方法名
//返回IEnumerable类型,而不是IEnumerator 类型
public IEnumerable GetEnumerator(int num)
{
foreach (Pencil pencil1 in pencil)
{
if (pencil1.Num > num)
{
yield return pencil1;
}
}
}
} 调用代码:

PencilBox pb=new PencilBox();
foreach (Pencil p in pb.GetEnumerator(1))
{
Console.WriteLine(p.Color);
}

.net 可枚举类型的构建方法的更多相关文章

  1. 枚举类型的使用方法enum

    一.枚举类型的使用方法 一般的定义方式如下: enum enum_type_name { ENUM_CONST_1, ENUM_CONST_2, ... ENUM_CONST_n } enum_var ...

  2. enum枚举类型的使用

    修饰符为public static enum,不用加final,否则提示错误. 枚举类的所有实例必须在枚举类中显式列出(,分隔,; 结尾).列出的实例系统会自动添加 public static fin ...

  3. [CLR via C#]15. 枚举类型和位标志

    一.枚举类型 枚举类型(enumerated types)定义了一组"符号名称/值"配对. 例如,以下Color类型定义了一组符号,每个符号都标识一种颜色: internal en ...

  4. 【转】java枚举类型enum的使用

    原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

  5. java枚举类型enum的使用

    2015-10-24 java达人 Java 中 的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先打开jdk 中的E ...

  6. 自定义枚举类型的常用操作-附源码(xjl456852原创)

    自定义枚举类型中,假如我们有name和desc这样的属性,并在这个基础上定义了多个对象. 那么就可能用到通过name获取desc,或者通过desc获取name.通过name或者desc获取对应的枚举对 ...

  7. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...

  8. Java中的枚举类型详解

    枚举类型介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义 ...

  9. java基础(十一) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

随机推荐

  1. Klockwork告警常见错误

    下面列举的是Klockwork告警中常见的告警形式,这些情况在编译阶段都不会报出来语法上的错误,并且在运行阶段执行到的概率很小.但是在某些场景下一旦执行到了这些语句, 很可能引起进程的跑飞和挂起.   ...

  2. Linux:备份

    一.每日备份数据 该脚本backupday.sh用来每日备份你需要备份的文件或目录 使用办法 1)打开脚本修改要备份的目录或文件和备份到的目录(如从A备份到B) 2)修改后运行脚本 需要备份数据时,直 ...

  3. 服务端获取客户端html页面内容-2013-6-28-2

    客户端怎么提交  整个html页面?    分析:      1>我们知道b/s模式,也知道http协议.服务端想要获取客户端的数据,客户端就 必须提交给它,服务器才能获取到.     2> ...

  4. Springboot 入门之Hello World

    首先使用maven进行包加载和配置,但是你maven一定要配置好,maven的setting.xml文件一定要配置好,不然jar包加载不了的. <project xmlns="http ...

  5. 转]python 结巴分词(jieba)学习

    原文  http://www.gowhich.com/blog/147 主题 中文分词Python 源码下载的地址:https://github.com/fxsjy/jieba 演示地址:http:/ ...

  6. The Linux Mint 18.1:Eclipse Run The C++ And Python ConfigorationWhen You achieve above step,you can run the c++ and python! (Next OTL ,PYOTL is Project That Write By Ruimin Shen(ability man) )

    # Copyright (c) 2016, 付刘伟 (Liuwei Fu)# All rights reserved.# 转载请注明出处 1.Install The Eclipse,g++ Use T ...

  7. 【UOJ #280】【UTR #2】题目难度提升

    http://uoj.ac/problem/280 非常难想的贪心,用set\(O(nlogn)\). 调了一天qwq. 题解 #include<set> #include<cstd ...

  8. curl命令PostJson

    curl -H "Content-Type: application/json" -X POST  --data '{"data":"1"} ...

  9. 校门外的树 OpenJudge 1.6.06

    06:校门外的树 总时间限制:  1000ms 内存限制:  65536kB 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0 ...

  10. R语言 决策树算法

    定义: 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解 ...