当前位置:编程学习 > C#/ASP.NET >>

C# foreach循环实例详解

在编写C#代码时,我们会发现使用foreach循环会比使用for循环方便,不需要进行数据类型的强制转换,不需要使用下标!通过帮助文档的查看可知,如果要对一个对象使用foreach进行循环的话则此对象的类型必须拥有GetEnumerator方法,此方法是在IEnumerable接口下的,但是否实现此接口无所谓!GetEnumerator方法需要返回一个IEnumerator的实例,因为在进行foreach遍历时会使用到一个属性:Current和一个方法:MoveNext!以下是带有注释的源代码:
using System;
using System.Collections;

namespace ConTest01
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   Persons p = new Persons("jack","tom","marry","mike");
   foreach(string s in p)
   {
    Console.WriteLine(s);
   }
  }
 }

 public class Persons
 {
  public string[] m_Names;

  public Persons(params string[] Names)
  {
   this.m_Names = new string[Names.Length];
   Names.CopyTo(this.m_Names,0);
  }

  public string this[int index]
  {
   get
   {
    return this.m_Names[index];
   }
   set
   {
    this.m_Names[index] = value;
   }
  }

  #region IEnumerable 成员

  //如果此类需要被foreach遍历则必须拥有此方法,至于是否实现IEnumerable接口倒是无所谓
  public IEnumerator GetEnumerator()
  {
   //返回一个IEnumerator的实例
   return new PersonsEnumerator(this);
  }

  #endregion

 }

 public class PersonsEnumerator : IEnumerator
 {
  private int index = -1;
  private Persons P;

  public PersonsEnumerator(Persons P)
  {
   this.P = P;
  }

  #region IEnumerator 成员

  //重置方法
  public void Reset()
  {
   this.index = -1;
  }

  //得到当前值的属性,是只读,因此在进行foreach遍历时不能修改遍历到的元素内容
  public object Current
  {
   get
   {
    return this.P[index];
   }
  }

  //将当前实例内部的索引前进一位,并判断前进后是否还有元素
  public bool MoveNext()
  {
   int tempIndex = this.index;
   if(tempIndex >= this.P.m_Names.Length)
   {
    return false;
   }
   else
   {
    return true;
   }
  }
  #endregion

 }

要对一些对象做添加修改删除处理。别的到没什么,删除时出现了点问题似的。
 
  因为是从一个类的集合中删除掉一个元素。这样就要遍历整个集合,而foreach正是为遍历准备的新玩意。自然而然用上了。于是代码类似如下:
 
string temp = name.Text; // 从TextBox中读出数据
foreach (LCourse cou in Data.myCourse) // 在List中遍历
{
if (cou.name == temp) // 判断cou的名字匹配
{
Data.myCourse.Remove(cou); // 匹配的即为要删除的,从列表中去除
break; // 跳出循环
}
}

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,