ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Compiler Error CS1579 foreach 语句不能对“type1”类型的变量进行操作,因为“type2”不包含“identifier”的公共定义 若要使用 [foreach](https://msdn.microsoft.com/zh-cn/library/ttw7t8t6.aspx) 语句循环访问某个集合,该集合必须满足以下要求: * 它必须是一个接口、类或结构。 * 它必须包含一个返回类型的公共 [GetEnumerator](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.getenumerator.aspx) 方法。 * 返回类型必须包含一个名为 [Current](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.current.aspx) 的公共属性和一个名为 [MoveNext](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerator.movenext.aspx) 的公共方法。 * 有关更多信息,请参见 [如何:使用 foreach 访问集合类(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/9yb8xew9.aspx)。 在本示例中,[foreach](https://msdn.microsoft.com/zh-cn/library/ttw7t8t6.aspx) 无法循环访问集合,因为 MyCollection 集合中没有 **public**[GetEnumerator](https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.getenumerator.aspx) 方法。 下面的示例生成 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); } } } ```