我试图做这样的事情,但这不行:
class Garage { private List<Car> cars = new List<Car>(); public Car this[int i] { get { return cars[i]; } } //... } Garage g = new Garage(); //get CS1579 - no GetEnumerator deFinition foreach (Car c in g) { //... }
由于MSDN表示索引器可能超载,所以我决定在这里询问专家.如何超载索引器与foreach循环配合?
解决方法
foreach
与
indexers无关.您需要声明一个返回枚举器的GetEnumerator方法. (当您处于这种状态时,实现
IEnumerable<Car>
接口也许是明智的,它提供了这种方法.)在您特定的情况下,您可以轻松地这样做:
class Garage : IEnumerable<Car> { private List<Car> cars = new List<Car>(); public Car this[int i] { get { return cars[i]; } } // For IEnumerable<Car> public IEnumerator<Car> GetEnumerator() { return cars.GetEnumerator(); } // For IEnumerable IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }
实现IEnumerable<Car>
接口的巨大优点是您可以使用所有LINQ扩展方法,例如Where
和Select
,例如:
var redCars = myGarage.Where(car => car.Color == CarColor.Red);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。