一、 IEnumerator
解释:它是一个的集合访问器,使用foreach语句遍历集合或数组时,就是调用 Current、MoveNext()的结果。
public interface IEnumerator
{
// 返回结果: 集合中的当前元素。
object Current { get; }
// 返回结果: 如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
bool MoveNext();
// 调用结果:将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
void Reset();
}
二、IEnumerable
解释:它利用 GetEnumerator() 返回 IEnumerator 集合访问器。
public interface IEnumerable
{
// 返回结果: 可用于循环访问集合的IEnumerator 对象。
IEnumerator GetEnumerator();
}
三、举个栗子
using System;
using System.Collections;
using System.Collections.Generic;
namespace ArrayListToList
{
// 定义student类
public class Student
{
public string Id { get; set; }
public string Name { get; set; }
public string Remarks { get; set; }
public Student(string id, string name, string remarks)
{
this.Id = id;
this.Name = name;
this.Remarks = remarks;
}
}
class Program
{
static void Main(string[] args)
{
ArrayList arrStus = new ArrayList
{
new Student("1313001", "liuliu"," little rabbit"),
new Student("1313002", "zhangsan", "little tortoise")
};
// List<T> 继承了IEnumerable<T>, IEnumerble<T>继承了IEnumerable.
List<Student> stuL = ArrListToArr<Student>(arrStus);
foreach(Student stu in stuL)
{
Console.WriteLine($"{ stu.Name + " " + stu.Id + " " + stu.Remarks }");
};
}
// arrList 转换为 List<T>
// ArrList 定义时已继承了IEnumerable
static List<T> ArrListToArr<T>(ArrayList arrL)
{
List<T> list = new List<T>();
IEnumerator enumerator = arrL.GetEnumerator();
while (enumerator.MoveNext())
{
T item = (T)(enumerator.Current);
list.Add(item);
}
return list;
}
}
}