.net 可枚举类型的构建方法
数组可以使用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 可枚举类型的构建方法的更多相关文章
- 枚举类型的使用方法enum
一.枚举类型的使用方法 一般的定义方式如下: enum enum_type_name { ENUM_CONST_1, ENUM_CONST_2, ... ENUM_CONST_n } enum_var ...
- enum枚举类型的使用
修饰符为public static enum,不用加final,否则提示错误. 枚举类的所有实例必须在枚举类中显式列出(,分隔,; 结尾).列出的实例系统会自动添加 public static fin ...
- [CLR via C#]15. 枚举类型和位标志
一.枚举类型 枚举类型(enumerated types)定义了一组"符号名称/值"配对. 例如,以下Color类型定义了一组符号,每个符号都标识一种颜色: internal en ...
- 【转】java枚举类型enum的使用
原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...
- java枚举类型enum的使用
2015-10-24 java达人 Java 中 的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先打开jdk 中的E ...
- 自定义枚举类型的常用操作-附源码(xjl456852原创)
自定义枚举类型中,假如我们有name和desc这样的属性,并在这个基础上定义了多个对象. 那么就可能用到通过name获取desc,或者通过desc获取name.通过name或者desc获取对应的枚举对 ...
- 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)
java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...
- Java中的枚举类型详解
枚举类型介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义 ...
- java基础(十一) 枚举类型
枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...
随机推荐
- STM8S ADC初始化设置及应用
//ADC通道号定义 #define ADC_Chanel0 (unsigned char)0x00 #define ADC_Chanel1 (unsigned char)0x01 #define A ...
- Python中的多进程与多线程(二)
在上一章中,学习了Python多进程编程的一些基本方法:使用跨平台多进程模块multiprocessing提供的Process.Pool.Queue.Lock.Pipe等类,实现子进程创建.进程池(批 ...
- EntityFramework Core Raw Query再叙注意事项
前言 最近一直比较忙没有太多时间去更新博客,接下来会一直持续发表相关内容博客,上一篇我们讲到了EF Core中的原始查询,这节我们再来叙述一下原始查询,本文是基于在项目当中用到时发现的问题. 话题 我 ...
- SmoOne——开源免费的企业移动OA应用,基于VS.Net
一.SmoOne是什么一个开源的移动OA应用 二.语言.Net 三.开发环境Visual Studio 四.开发平台Smobiler Designer 五.功能该应用开源代码中包含注册.登录.用户信息 ...
- MVC源码解析 - UrlRoutingModule / 路由注册
从前面篇章的解析, 其实能看的出来, IHttpModule 可以注册很多个, 而且可以从web.config注册, 可以动态注册. 但是有一个关键性的Module没有讲, 这里就先来讲一下这个关键性 ...
- Java中修饰符
下面这张图应该大家都见过,根据图表来记忆最好理解 范围 private friendly(默认) protected public 当前类 √ √ √ √ 当前包中的类 √ √ √ 当前包中的类, ...
- 未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad的真正解决办法
未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3 ...
- 利用Hibernate监听器实现用户操作日志
网上搜索发现,实现用户操作日志的方式有:自定义注解方式.Hibernate拦截器方式.Hibernate监听器方式等. 1.自定义注解方式较为麻烦,需要进行操作记录的方法均需要添加注解,但是相对的操作 ...
- c# base和this在构造函数中的应用
构造函数可以使用 base 关键字来调用基类的构造函数.例如: public class Manager : Employee{ public Manager(int annualSalary) : ...
- git的一些疑难点
一 .git reset,git revert,git checkout的区别和联系 主要参考:http://www.cnblogs.com/houpeiyong/p/5890748.html git ...