这个错误信息表明你尝试在一个不支持迭代的类型上使用 foreach
循环。foreach
循环要求被迭代的对象必须实现 IEnumerable
接口或者具有一个公共的 GetEnumerator
方法。
foreach
循环进行迭代。IEnumerator
接口的对象,该对象可以用来遍历集合中的元素。当尝试对一个没有实现 IEnumerable
接口或没有 GetEnumerator
方法的类型使用 foreach
循环时,就会出现这个错误。
IEnumerable
接口或者是否有 GetEnumerator
方法。IEnumerable
接口或添加 GetEnumerator
方法。假设你有一个自定义类 MyClass
,它内部有一个列表,但你忘记实现迭代器:
public class MyClass
{
public List<int> Numbers { get; set; }
public MyClass()
{
Numbers = new List<int> { 1, 2, 3, 4, 5 };
}
}
如果你尝试这样迭代 MyClass
的实例:
MyClass myObject = new MyClass();
foreach (int number in myObject) // 这里会报错
{
Console.WriteLine(number);
}
你需要修改 MyClass
来实现 IEnumerable
接口:
public class MyClass : IEnumerable<int>
{
public List<int> Numbers { get; set; }
public MyClass()
{
Numbers = new List<int> { 1, 2, 3, 4, 5 };
}
public IEnumerator<int> GetEnumerator()
{
return Numbers.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
现在你可以正常使用 foreach
循环了:
MyClass myObject = new MyClass();
foreach (int number in myObject)
{
Console.WriteLine(number);
}
List<T>
, Dictionary<TKey, TValue>
, HashSet<T>
等都实现了 IEnumerable
接口。IEnumerable
接口可以让你的集合支持 foreach
循环。通过这种方式,你可以确保你的类型能够被正确地迭代,从而避免 foreach
使用时的错误。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云