nan*_*nan 10 .net c# foreach indexer
我试图做这样的事情,但这不起作用:
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)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
由于MSDN说索引器可能超载,所以我决定在这里问专家.如何重载索引器与foreach
循环合作?
Tim*_*mwi 37
foreach
与索引器无关.您需要声明一个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(); }
}
Run Code Online (Sandbox Code Playgroud)
实施的一个巨大的好处IEnumerable<Car>
界面,你可以使用所有的LINQ扩展方法,如Where
和Select
,例如:
var redCars = myGarage.Where(car => car.Color == CarColor.Red);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5306 次 |
最近记录: |