数组可以使用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. mmap学习

    mmap学习 内存页: Linux是以页为单位来管理物理内存的,一页大小一般等于4096字节.页容量越大,系统中可能存在的内存碎片就越多. mmap将一个磁盘上的文件或者对象映射进内存.文件被映射到多 ...

  2. ZOJ 1204 一个集合能组成多少个等式

    Additive equations Time Limit : 20000/10000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other ...

  3. Coursera Machine Leaning 课程总结

    最近机器学习比较火热,身边很多同学都有兴趣,恰好Coursera上面有这门课.讲授这门课的Andrew教授任职斯坦福大学,是coursera的联合创建者,在机器学习领域颇有成就,身边的同学也有几位上这 ...

  4. 说说Request.Params[key]和Request[key]

    摘要 其实你一看到,就应该会想到,这个不简单吗,不就是服务端接收参数的一种方式吗?是的.在asp.net编程中,QueryString.Form.Cookie是三种比较常见的接收客户端参数的方式.Qu ...

  5. MS Word 目录排版

    昨天整理一份把网页的内容复制粘贴到Word里的文件,碰到了这样一个问题: 网页上面也会有一级标题,二级标题,三级标题等.当我们在写博客的时候,也会去使用这些.这也就导致复制过来之后,直接生成的目录很乱 ...

  6. [asp.net] 利用WebClient上传图片到远程服务

    一.客户端 1.页面 1 <form id="Form1" method="post" runat="server" enctype= ...

  7. 微信JSAPI支付 跟 所遇到的那些坑

    首先介绍一下我在调用微信支付接口使用的是 weixin.senparc SDK,非常方便好用开源的一个微信开发SDK. weixin.senparc SDK 官网:http://weixin.senp ...

  8. Jquery Form表单取值

    之前js取form表单的值都是一个一个的取,数量一多之后容易出错而且烦透了.感谢那些愿意分享的人. 页面定义form,并给form指定id值,里面的元素只要是需要键值对应的都赋予name属性,并且na ...

  9. Spark集群搭建步骤

    问题: 参考:Spark快速入门指南 – Spark安装与基础使用

  10. C语言:XML学习

    说明:文章中代码是我参考别人的例子得来的. XML基础 一.XML的概念 Xml是一种可扩展标记语言.在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如 ...