IEnumerable

一个存储和获取 object 类型对象引用的集合,可以使用 foreach 进行遍历的集合。

namespace IEnumerableDemo
{
/// <summary>
/// 构建一个IEnumerable对象,遍历其中的元素
/// </summary>
class Program
{
static void Main(string[] args)
{
Person[] arrayperson = new Person[3]
{
new Person("xiaohon","zhang"),
new Person("xiaoguang","huang"),
new Person("xiaongming","lin")
};
People plist = new People(arrayperson);
foreach (Person p in plist)
Console.WriteLine(p.firstName + " " + p.lastName);
Console.ReadKey();
}
}

/// <summary>
/// 简单的业务对象
/// </summary>
public class Person
{
public string firstName;
public string lastName;

public Person(string fName, string lName)
{
this.firstName = fName;
this.lastName = lName;
}
}

/// <summary>
/// Person对象的集合:这个类实现一个IEnumerable,以便可以使用foreach进行遍历
/// </summary>
public class People : IEnumerable
{
private Person[] _people;
public People(Person[] pArray)
{
_people = new Person[pArray.Length];
for (int i = 0; i < pArray.Length; i++)
{
_people[i] = pArray[i];
}
}

//用于实现GetEnumerator方法
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)GetEnumerator();
}

public PeopleEnum GetEnumerator()
{
return new PeopleEnum(_people);
}

}

/// <summary>
/// 当需要实现一个可以枚举遍历的对象,需要实现枚举子 IEnumerator.
/// </summary>
public class PeopleEnum : IEnumerator
{
public Person[] _people;

// 枚举子指针排位时,缺省指向第一个元素
// 当方法MoveNext()被调用时,才会指向下一个元素
int position = -1;

public PeopleEnum(Person[] list)
{
_people = list;
}

// 获取当前的项(只读属性)
public object Current
{
get
{
return _people[position];
}
}

// 将游标的内部位置向前移动
public bool MoveNext()
{
position++;
return (position < _people.Length);
}

// 将游标重置到第一个成员前面
public void Reset()
{
position = -1;
}
}
}

时间: 2024-11-06 04:00:59

IEnumerable的相关文章

.NET教程:.NET 面试题之IEnumerable

.NET教程,今天给大家介绍的是:.NET 面试题之IEnumerable ,这是在面试的时候可能会碰到的一道题目,这道题的注解分为了两个部分,这一篇是第一部分! 什么是IEnumerable? IEnumerable及IEnumerable的泛型版本IEnumerable是一个接口,它只含有一个方法GetEnumerator.Enumerable这个静态类型含有很多扩展方法,其扩展的目标是IEnumerable. 实现了这个接口的类可以使用Foreach关键字进行迭代(迭代的意思是对于一个集合

Entity Framework中IQueryable, IEnumerable, IList的区别

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Toplink的

.NET教程:.NET 面试题之IEnumerable(二)

.NET教程,这篇文章还是接着上文介绍的第二部分!多的不说,直接献上内容! 使用yield关键字实现方法GetEnumerator 如果iterator本身有实现IEnumerator接口(本例就是一个数组),则可以有更容易的方法: public IEnumerator GetEnumerator() { return _people.GetEnumerator(); } 注意,这个方法没有Foreach的存在,所以如果你改用for循环去迭代这个集合,你得自己去呼叫MoveNext,然后获得集合

IEnumerable,IQueryable之前世今生

IEnumerable<T>在.Net2.0中我们已经很熟悉了.你想要利用Foreach迭代吗?实现 IEnumerable<T>吧!你想直接做为数据源绑定到控件吗?使用IEnumerable吧!是的.只要是序列.它都实现了 IEnumerable<T>(.Net1.0下的序列类除外).除了这些.LINQ的出现.还赋予了 IEnumerable<T>更强悍的功能.IQueryable<T>继承IEnumerable<T>.详细看 IE

IEnumerable和IEnumerator 详解

http://blog.csdn.net/byondocean/article/details/6871881 初学C#的时候,老是被IEnumerable.IEnumerator.ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质. 下面我们先看IEnumerable和IEnumerator两个接口的语法定义.其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于

IEnumerable和IQueryable和Linq的查询

IEnumerable和IEnumerable 1.IEnumerable查询必须在本地执行.并且执行查询前我们必须把所有的数据加载到本地.而且更多的时候.加载的数据有大量的数据是我们不需要的无效数据.但是我们却不得不传输更多的数据.做更多的无用功.使用IEnumerable,所有对于IEnumerable的过滤,排序等操作,都是在内存中发生的.也就是说数据已经从数据库中获取到了内存中,只是在内存中进行过滤和排序操作. 2.IQueryable却总能只提供你所需要的数据.大大减少了数据的传输IQ

Newtonsoft.Json 序列 反序列 IEnumerable

下面是memcached 中获取的obj 类型的数据,转list string sessionId = Request.Cookies["sessionId"].Value;//授权从Cookie中传递过来的Memcache的Key Object obj = MemcachedHelper.Get(sessionId);//根据key从Memcache中获取用户的信息 // 序列化为JSON字串 string _json = JsonConvert.SerializeObject(ob

C#基础复习IEnumerable(和 yield return的使用滴呀 )

IEnumerable 真是基础中的基础,然而..... 我们直接来看看这个接口的实现吧: 它是一个公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代.换句话说,对于所有数组的遍历,都来自IEnumerable,那么我们就可以利用这个特性,来定义一个能够遍历xxxxxx的通用方法 先看我们的经典实例1: using System; using System.Collections; using System.Collections.Generic; using System.Linq; usi

通过Expression 动态实现IEnumerable&lt;T&gt; CustomOrderBy

最近在脑补Expression Tree 系列 http://www.cnblogs.com/Ninputer/archive/2009/08/28/expression_tree1.html 然后发现 http://www.codeproject.com/Articles/235860/Expression-Tree-Basics 写得相当不错. 所以就稍微改动,实现了如下代码 public static IEnumerable OrderBy(this IEnumerable source,

IEnumerable&lt;T&gt; 接口和GetEnumerator 详解

IEnumerable<T> 接口 .NET Framework 4.6 and 4.5 公开枚举数,该枚举数支持在指定类型的集合上进行简单迭代. 若要浏览此类型的.NET Framework 源代码,请参阅参考源. 命名空间:  System.Collections.Generic程序集:  mscorlib(在 mscorlib.dll 中) public interface IEnumerable<out T> : IEnumerable 类型参数    out T 要枚举的