1.IEnumerable接口允许使用foreach循环，包含GetEnumerator()方法，可以迭代集合中的项。

2.IEnumerator接口是一个真正的集合访问器，它包含MoveNext()方法和Current属性，在foreach循环中，如果MoveNext()返回True,则就是用IEnumerator接口的Current属性来获取对象的一个引用，用于foreach循环。

3.如果要迭代一个类，可以使用GetEnumerator(),其返回类型是IEnumerator.

如果要迭代一个类成员，则用IEnumerable.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections; namespace _10_5_5
{
public class person
{
private string name;
private int age;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
public person(string PName, int PAge)
{
Name = PName;
Age = PAge;
}
public static bool operator >(person a, person b)
{
if (a.Age > b.Age)
return true;
else
return false;
}
public static bool operator <(person a, person b)
{
if (a.Age > b.Age)
return false;
else
return true;
}
public static bool operator >=(person a, person b)
{
if (a.Age >= b.Age)
{
return true;
}
else
return false;
}
public static bool operator <=(person a, person b)
{
if (a.Age <= b.Age)
return true;
else
return false;
}
}
public class People : DictionaryBase
{
public IEnumerable Ages//注意是IEnumerable
{
get
{
foreach (object person in Dictionary.Values)
{
yield return (person as person).Age;
}
}
}
public person[] GetOldest()
{
People oldPeople = new People();
person oldPerson = null;
person currentPerson;
foreach (DictionaryEntry myPeople in Dictionary)
{
currentPerson = myPeople.Value as person;
if (oldPerson == null)
{
oldPerson = currentPerson;
}
else
{
if (currentPerson > oldPerson)
{
oldPeople.Clear();
oldPerson = currentPerson;
}
else
{
if (currentPerson >= oldPerson)
{
}
}
}
}
person[] oldestPeopleArray = new person[oldPeople.Count];
int copyIndex = ;
foreach (DictionaryEntry p in oldPeople)
{
oldestPeopleArray[copyIndex] = p.Value as person;
copyIndex++;
}
return oldestPeopleArray;
}
{
}
public person this[string SName]
{
get
{
return (person)Dictionary[SName];
}
set
{
Dictionary[SName] = value;
}
} }
class Program
{
static void Main(string[] args)
{
person a = new person("Jack", );
person b = new person("Json", );
People s = new People();
foreach(int age in s.Ages)
{
Console.WriteLine("{0}\t", age);
}
}
}
}

Primer.CS

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
{
public class Primes
{
private long min;
private long max;
public Primes():this(,)
{ }
public Primes(long minNum,long maxNum)
{
if(minNum<)
{
min=;
}else{
min = minNum;
}
max = maxNum;
}
public IEnumerator GetEnumerator()//返回的是IEnumerator
{
for(long i=min;i<max;i++)
{
int flag = ;
for(long j=;j<Math.Sqrt(min);j++)
{
if(i%j==)
{
flag = ;
break;
}
}
if(flag==)
{
yield return i;
}
}
}
}
}

Program.CS:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
{
class Program
{
static void Main(string[] args)
{
Primes s = new Primes(, );
foreach(long i in s)
{
Console.WriteLine("{0}\t", i);
}
}
}
}

关于迭代器中IEnumerable与IEnumerator的区别的更多相关文章

1. 在C#中IEnumerable与IEnumerator

对于很多刚开始学习C#同学来说经常会遇到IEnumerable这个关键字,enumerate在字典里的解释是列举,枚举,因此可想而知这个关键字肯定是和列举数据有关的操作. public interfa ...

2. C#中IEnumerable和IEnumerator区别

IEnumerator:是一个真正的集合访问器,提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current返回的是object类型.IEnumerable: ...

3. C#--IEnumerable 与 IEnumerator 的区别

一. IEnumerator 解释:它是一个的集合访问器,使用foreach语句遍历集合或数组时,就是调用 Current.MoveNext()的结果. // 定义如下public interface ...

4. C# ~ 从 IEnumerable / IEnumerator 到 IEnumerable&lt;T&gt; / IEnumerator&lt;T&gt; 到 yield

IEnumerable / IEnumerator 首先,IEnumerable / IEnumerator 接口定义如下: public interface IEnumerable /// 可枚举接 ...

5. C#中的 IList, ICollection ,IEnumerable 和 IEnumerator

IList, ICollection ,IEnumerable 很显然,这些都是集合接口的定义,先看看定义: // 摘要: // 表示可按照索引单独访问的对象的非泛型集合. [ComVisible(t ...

6. C#编程之IList&lt;T&gt;、List&lt;T&gt;、ArrayList、IList, ICollection、IEnumerable、IEnumerator、IQueryable 和 IEnumerable的区别

额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别...  在C#中 ...

7. 细说 C# 中的 IEnumerable和IEnumerator接口

我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...

8. 转载IEnumerable与IEnumerator区别

public interface IEnumerable {     IEnumerator GetEnumerator(); }   public interface IEnumerator {   ...

9. C#中IEnumerable、ICollection、IList、IQueryable 、IQueryable 、List之间的区别

一:一个简单的例子 int[] myArray = { 1, 32, 43, 343 }; IEnumerator myie = myArray.GetEnumerator(); myie.Reset ...

随机推荐

1. MVC学习系列——ModelBinder扩展

在MVC系统中,我们接受数据,运用的是ModelBinder 的技术. MVC学习系列——ActionResult扩展在这个系列中,我们自定义了XmlResult的返回结果. 那么是不是意味着能POS ...

2. ACM比赛（进制转换）

Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Description 把十进制整数转换 ...

3. 视音频编解码学习工程：FLV封装格式分析器

===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...

4. my.ini的路径分隔符

5. python基础3--函数

1.函数定义 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 ...

本博客第一篇学术性博客,所以还是写点什么东西: 首先这篇博客以及以后的博客中的代码尽量百分之90是自己写过的: 可能有部分图片和代码是我认为别人更好的故摘抄下来, 本人三观正确,所以一定会表明来源: ...

7. 查看本地Git仓库历史修改内容

查看历史内容 在.git文件 同级目录下,右键 选择 git history 但是红框中的路径无法拷贝.右键红框中的任一文件,有 HighLight this only, Highlight this ...

8. IIS7配置伪静态把后缀名映射为html方案

1.在IIS新建站点.[创建的时候不用去选择版本和模式,默认即可] 2.选中站点,切换到功能试图,找到“处理程序映射",双击之后,在打开窗口右侧的操作栏目下做如下设置: 1)右边" ...

9. ssm项目开发通用base模块和工具

controller层日期转换通用类 package cn.itcast.jk.controller; import java.text.DateFormat; import java.text.Si ...