迭代器的实现都是以数组来实现的,代码如下:
//Person类namespace CA_LINQ
{
class Person:IEnumerable
{
public String Name;
public String Age;
private Person[] per;
public Person(String name,String age)
{
Name = name;
Age = age;
}
public Person(Person[] array)
{
//迭代对象
per = new Person[array.Length];
for (int i = 0; i < array.Length; i++)
{
per[i] = array[i];//数组赋值
}
} #region IEnumerable 成员 public IEnumerator GetEnumerator()
{
return new PersonEnum(per);
} #endregion
}
}
//实现foreach语句的PersonEnum类namespace CA_LINQ
{
class PersonEnum: IEnumerator
{
public Person[] _per; //实现数组
int position = -1; //设置指针
public PersonEnum(Person[] list) //构造方法
{
_per = list;
}
public Boolean MoveNext() //实现向前移动
{
position ++;
return (position < _per.Length);
}
public void Reset() //位置重置
{
position = -1;
} #region IEnumerator 成员 public object Current
{
get
{
try
{
return _per[position]; //返回对象
}
catch(IndexOutOfRangeException) //捕捉异常
{
throw new InvalidOperationException();
}
}
} #endregion
}
}//主类namespace CA_LINQ
{
class Program
{
static void Main(string[] args)
{
Person[] MyPerson = new Person[2]//创建两个Person对象
{
new Person("陈湖","25"),
new Person("陈在下","24"),
};
Person personlist = new Person(MyPerson);
foreach (Person p in personlist)
{
Console.WriteLine("姓名:" + p.Name + ",年龄:" + p.Age);
}
Console.ReadKey();
}
}
}如果将foreach (Person p in personlist) 替换为 foreach (Person p in MyPerson )
也是可以的,所以说在这里实现迭代模式是不是多余的呢?还是有其他作用呢?
//Person类namespace CA_LINQ
{
class Person:IEnumerable
{
public String Name;
public String Age;
private Person[] per;
public Person(String name,String age)
{
Name = name;
Age = age;
}
public Person(Person[] array)
{
//迭代对象
per = new Person[array.Length];
for (int i = 0; i < array.Length; i++)
{
per[i] = array[i];//数组赋值
}
} #region IEnumerable 成员 public IEnumerator GetEnumerator()
{
return new PersonEnum(per);
} #endregion
}
}
//实现foreach语句的PersonEnum类namespace CA_LINQ
{
class PersonEnum: IEnumerator
{
public Person[] _per; //实现数组
int position = -1; //设置指针
public PersonEnum(Person[] list) //构造方法
{
_per = list;
}
public Boolean MoveNext() //实现向前移动
{
position ++;
return (position < _per.Length);
}
public void Reset() //位置重置
{
position = -1;
} #region IEnumerator 成员 public object Current
{
get
{
try
{
return _per[position]; //返回对象
}
catch(IndexOutOfRangeException) //捕捉异常
{
throw new InvalidOperationException();
}
}
} #endregion
}
}//主类namespace CA_LINQ
{
class Program
{
static void Main(string[] args)
{
Person[] MyPerson = new Person[2]//创建两个Person对象
{
new Person("陈湖","25"),
new Person("陈在下","24"),
};
Person personlist = new Person(MyPerson);
foreach (Person p in personlist)
{
Console.WriteLine("姓名:" + p.Name + ",年龄:" + p.Age);
}
Console.ReadKey();
}
}
}如果将foreach (Person p in personlist) 替换为 foreach (Person p in MyPerson )
也是可以的,所以说在这里实现迭代模式是不是多余的呢?还是有其他作用呢?
解决方案 »
- 关于API函数的声明,一头雾水
- Remoting 远程调用问题,高手进
- 关于Socket的广播问题:
- 请高人指点迷津:2. 在各界面录入信息时,输入法默认总是全角状态,这样数字输入不正常
- 这句话怎么写?
- 新手求一个水晶报表百分比问题,望赐教,在线等
- SmtpMail类对象为什么不能用Send()方法?
- 如何在C#中设置<title></title>中的文本?
- C#知识库怎么也无法下载,哪位下载成功的肯否用MAIL发给我?50分相送,谢谢
- 新手求救!有关C#的Web应用程序控件显示问题!先谢谢了!
- 我把richtextbox放在tablelayout中时窗体加载时字外面绘的方框消失了,怎么办,
- 前台调用后台方法,父页面掉子页面方法
也是可以的,所以说在这里实现迭代模式是不是多余的呢?还是有其他作用呢?