c# – 重载索引器具有foreachable类
发布时间:2020-12-15 06:33:30 所属栏目:百科 来源:网络整理
导读:我试图做这样的事情,但这不行: class Garage { private ListCar cars = new ListCar(); public Car this[int i] { get { return cars[i]; } } //... } Garage g = new Garage(); //get CS1579 - no GetEnumerator definition foreach (Car c in g) { //...
我试图做这样的事情,但这不行:
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(); } } 实现 var redCars = myGarage.Where(car => car.Color == CarColor.Red); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |