求问下C#迭代理解
foreach就是迭代吗 怎么理解 还有程序中的迭代器和这是一个概念么 新手勿怪 迭代 C#
[解决办法]
可以这么理解。
[解决办法]
foreach关键字用来遍历迭代器IEnumerator,要求必须实现IEnumerable接口
[解决办法]
为楼上大神画蛇添足一下:迭代=遍历=循环,迭代器就是用来实现迭代的东西,如2楼所说,实现IEnumerable接口的方法即可使用foreach迭代。
附上迭代器设计模式代码:
public interface ICollection
{
object this[int i] { get; set; }
int Count { get; }
/// /// 获取迭代器 ///
/// /// 迭代器
Iterator GetIterator();
}
/// /// 迭代器接口 ///
public interface Iterator
{
bool MoveNext();
object Current { get; }
}
public class List : ICollection
{
private const int MAX = 10;
private object[] items;
public List()
{
items = new object[MAX];
}
public object this[int i]
{
get
{
return items[i];
}
set
{
this.items[i] = value;
}
}
#region ICollection Members
public int Count
{
get
{
return items.Length;
}
}
public Iterator GetIterator()
{
return new ListIterator(this);
}
#endregion
}
public class ListIterator : Iterator
{
private int index = 0;
private ICollection list;
public ListIterator(ICollection list)
{
this.list = list;
index = 0;
}
#region Iterator Members
public bool MoveNext()
{
if (index + 1 > list.Count) return false;
else
{
index++;
return true;
}
}
public object Current
{
get
{
return list[index];
}
}
#endregion
}
class Program
{
static void Main(string[] args)
{
ICollection list = new List();
Iterator iterator = list.GetIterator();
while (iterator.MoveNext())
{
object current = iterator.Current;
}
Console.Read();
}
}
int start = 0;
while (start < arr.Length)
{
for (int i = start; i < arr.Length - 1; i++)
{
start++;
if (arr[i] > 0)
{
Console.WriteLine(arr[i]);
break;
}
}
Console.Write("是否继续(y/n)");
if (Console.ReadLine().ToLowCase() != "y") break;
}
var itor = arr.GetEnumerator();
itor.Reset();
while (itor.MoveNext())
{
if (itor.Current > 0)
{
Console.WriteLine(itor.Current);
break;
}
Console.Write("是否继续(y/n)");
if (Console.ReadLine().ToLowCase() != "y") break;
}