.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.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...
随机推荐
- 创建简单的响应式HTML5模版
创建简单的响应式HTML5模版 HTML5目前发展势头良好,已经逐渐得到大部分浏览器不同程度的支持.许多web开发者也已经学习到了不少关于HTML 5的基础知识并开始试图使用HTML 5制作网页.与此 ...
- eclipse debug 多线程
以前用到过许多线程开发,对多线程开发也算是小有点心得,但一开始多线程开发的时候,碰到很多壁.但总得来说,有个好的工具总是能事半功倍.我用的工具是eclipse,在开发多线程时,其debug模式是能直接 ...
- 使用DBUnit实现对数据库的测试
这是一个JavaProject,有关DBUnit用法详见本文测试用例 首先是用到的实体类User.java package com.jadyer.model; public class User { ...
- kubernetes入门之kube-proxy实现原理
kube-proxy service是一组pod的服务抽象,相当于一组pod的LB,负责将请求分发给对应的pod.service会为这个LB提供一个IP,一般称为cluster IP. kube-pr ...
- CALayer之mask属性-遮罩
CALayer有一个属性叫做mask. 这个属性本身就是个CALayer类型,有和其他图层一样的绘制和布局属性. 它类似于一个子图层,相对于父图层(即拥有该属性的图层)布局,但是它却不是一个普通的子图 ...
- struts2 ValueStack(值栈)解析
Struts2一个重要点就是值栈. ValueStack,是用来存储一些在各个action,或者说是通过s标签.el表达式等给前台Jsp等页面展示的东西. ValueStack是一个接口,其内部接口非 ...
- ASP.NET Zero--6.菜单加权限
1.打开文件MpaNavigationProvider.cs [..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Startup\MpaNavigation ...
- js中常用的Math方法总结
1.min()和max()方法 Math.min()用于确定一组数值中的最小值.Math.max()用于确定一组数值中的最大值. alert(Math.min(2,4,3,6,3,8,0,1,3)); ...
- 一键强制修改任意Mysql数据库的密码,修改任意环境Mysql数据库。
本文采用我软件里面的内置改密功能,可以一键强制修改Mysql数据库的密码, 在修改过程中,会强制干掉Mysql主程序,修改完成后重新启动Mysql就可以了. 首先讲解如何一键强制修改PHPWAMP自身 ...
- Xshell和VirtualBox虚机CentOS7的连接
后面的不能连接问题,出处为 http://m.blog.csdn.net/article/details?id=52755571 1.centos7的ip ,这里的enp0s3相当于eth0,是一个默 ...