看了官方的、网上其他的,写了2个demo,只不过还是没发现哪里会用到。
IEnumerable和IEnumerator都是System.Collections下的接口,结构分别如下:
namespace System.Collections
{
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
}
namespace System.Collections
{
// Summary:
// Supports a simple iteration over a nongeneric collection.
[ComVisible(true)]
[Guid("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerator
{
// Summary:
// Gets the current element in the collection.
//
// Returns:
// The current element in the collection.
//
// Exceptions:
// System.InvalidOperationException:
// The enumerator is positioned before the first element of the collection or
// after the last element.
object Current { get; }
// Summary:
// Advances the enumerator to the next element of the collection.
//
// Returns:
// true if the enumerator was successfully advanced to the next element; false
// if the enumerator has passed the end of the collection.
//
// Exceptions:
// System.InvalidOperationException:
// The collection was modified after the enumerator was created.
bool MoveNext();
//
// Summary:
// Sets the enumerator to its initial position, which is before the first element
// in the collection.
//
// Exceptions:
// System.InvalidOperationException:
// The collection was modified after the enumerator was created.
void Reset();
}
}
Demo1:
class Program
{
static void Main(string[] args)
{
Book[] books = new Book[3] { new Book() { BookName = "java" }, new Book() { BookName = ".net" }, new Book() { BookName = "php" } };
BookShop bookShop = new BookShop(books);
//输出java .net php
foreach (Book book in bookShop)
{
Console.WriteLine(book.BookName);
}
Console.Read();
}
}
//此类没有实现IEnumerable,只实现GetEnumerator()方法即可,因为数组本身已经有鸟~
public class BookShop
{
public Book[] books = new Book[4];
public BookShop(Book[] books)
{
this.books = books;
}
public IEnumerator GetEnumerator()
{
return books.GetEnumerator();
}
}
public class Book
{
public string BookName { get; set; }
}
class Program
{
static void Main(string[] args)
{
StringArray strArray = new StringArray("java,.net,php");
//输出java .net php
foreach (string s in strArray)
{
Console.WriteLine(s);
}
Console.Read();
}
}
public class StringArray
{
public string[] strArray;
public StringArray(string str)
{
strArray = str.Split(',');
}
public IEnumerator GetEnumerator()
{
return new StringArrayEnumerator(strArray);
}
}
public class StringArrayEnumerator : IEnumerator
{
int position = -1;
string[] strArray;
public StringArrayEnumerator(string[] strArray)
{
this.strArray = strArray;
}
public bool MoveNext()
{
if (position < this.strArray.Length - 1)
{
position++;
return true;
}
else
{
return false;
}
}
public object Current
{
get { return strArray.ElementAt(position); }
}
public void Reset()
{
this.position = -1;//回到初始值
}
}