更新:2007 年 11 月

错误消息

foreach 语句不能对“type1”类型的变量进行操作,因为“type2”不包含“identifier”的公共定义

若要使用 foreach 语句循环访问某个集合,该集合必须满足以下要求:

  • 它必须是一个接口、类或结构。

  • 它必须包含一个返回类型的公共 GetEnumerator 方法。

  • 返回类型必须包含一个名为 Current 的公共属性和一个名为 MoveNext 的公共方法。

  • 有关更多信息,请参见 如何:使用 foreach 访问集合类(C# 编程指南)

示例

在本示例中,foreach 无法循环访问集合,因为 MyCollection 集合中没有 publicGetEnumerator 方法。

下面的示例生成 CS1579。

 复制代码
// CS1579.cs
using System;
public class MyCollection 
{
   int[] items;
   public MyCollection() 
   {
      items = new int[5] {12, 44, 33, 2, 50};
   }

   // Delete the following line to resolve.
   MyEnumerator GetEnumerator()

   // Uncomment the following line to resolve:
   // public MyEnumerator GetEnumerator() 
   {
      return new MyEnumerator(this);
   }

   // Declare the enumerator class:
   public class MyEnumerator 
   {
      int nIndex;
      MyCollection collection;
      public MyEnumerator(MyCollection coll) 
      {
         collection = coll;
         nIndex = -1;
      }

      public bool MoveNext() 
      {
         nIndex++;
         return(nIndex < collection.items.GetLength(0));
      }

      public int Current 
      {
         get 
         {
            return(collection.items[nIndex]);
         }
      }
   }

   public static void Main() 
   {
      MyCollection col = new MyCollection();
      Console.WriteLine("Values in the collection are:");
      foreach (int i in col)   // CS1579
      {
         Console.WriteLine(i);
      }
   }
}