c#中foreach与接口IEnumerator和IEnumerable
2017-06-28 11:17
435 查看
转载至:http://blog.csdn.net/mashen1989/article/details/7695283
用foreach可以遍历集合中所有元素,实现:c#编译器会把foreach语句转换为IEnumerable接口中的方法和属性,例如
[csharp] view
plain copy
foreach(var val in intseq)
{
Console.WriteLine(val);
}
c#编译器把上述代码转换为:
[csharp] view
plain copy
IEnumerator enumerator =intseq.GetEnumerator;
while(enumerator.MoveNext())
{
int p=(int)enumerator.Current;
Console.WriteLine(p);
}
如果编写自定义的类可以用foreach遍历,那么必须实现两个接口IEnumerable和IEnumerator
[csharp] view
plain copy
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
[csharp] view
plain copy
public interface IEnumerator
{
bool MoveNext();
void Reset();
Object Current { get; }
}
例子:
[csharp] view
plain copy
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace @foreach
{
class IntSequence:IEnumerable,IEnumerator
{
private int index;
private int[] arr;
public IntSequence(int n)
{
index = -1;
arr=new int
;
for (int i = 0; i < arr.Length; ++i)
{
arr[i] = i + 1;
}
}
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
public void Reset()
{
index = -1;
}
public object Current
{
get
{
return arr[index];
}
}
public bool MoveNext()
{
index++;
return index < arr.Length;
}
}
class Program
{
static void Main(string[] args)
{
IntSequence intseq = new IntSequence(10);
foreach (var val in intseq)
{
Console.WriteLine(val);
}
}
}
}
c#中foreach与接口IEnumerator和IEnumerable
用foreach可以遍历集合中所有元素,实现:c#编译器会把foreach语句转换为IEnumerable接口中的方法和属性,例如[csharp] view
plain copy
foreach(var val in intseq)
{
Console.WriteLine(val);
}
c#编译器把上述代码转换为:
[csharp] view
plain copy
IEnumerator enumerator =intseq.GetEnumerator;
while(enumerator.MoveNext())
{
int p=(int)enumerator.Current;
Console.WriteLine(p);
}
如果编写自定义的类可以用foreach遍历,那么必须实现两个接口IEnumerable和IEnumerator
[csharp] view
plain copy
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
[csharp] view
plain copy
public interface IEnumerator
{
bool MoveNext();
void Reset();
Object Current { get; }
}
例子:
[csharp] view
plain copy
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace @foreach
{
class IntSequence:IEnumerable,IEnumerator
{
private int index;
private int[] arr;
public IntSequence(int n)
{
index = -1;
arr=new int
;
for (int i = 0; i < arr.Length; ++i)
{
arr[i] = i + 1;
}
}
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
public void Reset()
{
index = -1;
}
public object Current
{
get
{
return arr[index];
}
}
public bool MoveNext()
{
index++;
return index < arr.Length;
}
}
class Program
{
static void Main(string[] args)
{
IntSequence intseq = new IntSequence(10);
foreach (var val in intseq)
{
Console.WriteLine(val);
}
}
}
}
相关文章推荐
- c#中foreach与接口IEnumerator和IEnumerable
- C#基础知识系列九(对IEnumerable和IEnumerator接口的糊涂认识)
- C#中的foreach语句与枚举器接口(IEnumerator)及其泛型 相关问题
- C# 通过实现IEnumerable/IEnumerator接口 完成foreach遍历
- C#中的IEnumerable、IEnumerator与foreach深入探讨
- [C#]实现IEnumerable接口来使用foreach语句的一个实例
- C# 通过接口IEnumerator让自己编写的对象/类,实现foreach遍历方法
- C#基础知识系列九(对IEnumerable和IEnumerator接口的糊涂认识)
- C#的foreach可以遍历不继承IEnumerable接口的集合
- 实现IEnumerable和IEnumerator接口以支持foreach语句
- 如何自己实现IEnumerable和IEnumerator接口以支持foreach语句
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
- c#实现Foreach枚举_IEnumerable和IEnumerator
- 一个类型要想支持foreach则必须实现IEnumerable,IEnumerator两个接口。
- C#如何实现自定义集合的IEnumerable 和 IEnumerator 接口并使用foreach访问自定义集合
- 如何自己实现IEnumerable和IEnumerator接口以支持foreach语句
- 实现了IEnumerable接口的GetEnumerator 即可使用 Foreach遍历,返回一个IEnumerator对象
- 如何实现IEnumerable<T>和IEnumerator接口,一个ASP.NET MVC日志模型的实现
- Jack's Notes5——foreach的本质(通过IEnumerable接口实现遍历)
- 利用 IEnumerable接口 实现自定义类型的集合的foreach遍历