0

我想知道如何在没有 for、foreach 或任何 LINQ 等循环的情况下初始化数组。

从以下代码中,需要使用控制台应用程序在 .Netframework 中查找长度小于 2m 的汽车。

{
    ArrayList = CarType new ArrayList();

    CarType.Add(new CarList("Ford"));
    ((CarList)CarType[0]).Cars.Add(new Car("Focus", 2));
    ((CarList)CarType[0]).Cars.Add(new Car("Fiesta", 1));

    CarType.Add(new CarList("Peugeout"));
    ((CarList)CarType[1]).Cars.Add(new Car("206", 1));
    ((CarList)CarType[1]).Cars.Add(new Car("407", 2));

    RemoveLargeCars(CarType);
}


public static ArrayList RemoveLargeCars (ArrayList CarType)
{
    //Array List should be here
    return CarType;

}

它有两个类,如下所示。

class Car
{
    public string name;
    public float length;

    public Car(string newName, float newLength)
    {
        this.name = newName;
        this.length = newLength;
    }
}

Class CarList
{
    public string CarType;
    public ArrayList Pipes;

    public CarList(string newCarType)
    {
        carType = newCarType;
        Cars = new ArrayList();
    }
}

你能告诉我如何解决这个问题。提前致谢。

4

2 回答 2

0

使用静态Adapter方法ArrayList

CarType = ArrayList.Adapter(CarList);

但这可能在内部使用了一个循环,你无法摆脱它们,但至少这隐藏了它们。

于 2012-05-19T06:58:19.367 回答
0

好吧,首先你应该使用通用列表类型List<T>而不是ArrayList,这将使代码更简单。(最好的做法是推荐属性而不是公共字段):

class Car {

  public string Name { get; set; }
  public float Length { get; set; }

  public Car(string newName, float newLength) {
    Name = newName;
    Length = newLength;
  }

}

class CarList {

  public string CarType { get; set; }
  public List<Car> Cars { get; set; }

  public CarList(string newCarType, List<Car> newCars) {
    CarType = newCarType;
    Cars = newCars;
  }

  public CarList(string newCarType) : this(newCarType, new List<Car>()) {}

}

现在使用List<CarList>

List<CarList> CarType = new List<CarList>();

CarList ford = new CarList("Ford");
CarType.Add(ford);
ford.Cars.Add(new Car("Focus", 2));
ford.Cars.Add(new Car("Fiesta", 1));

CarList peugeot = new CarList("Peugeout");
CarType.Add(peugeot);
peugeot.Cars.Add(new Car("206", 1));
peugeot.Cars.Add(new Car("407", 2));

List<CarList> smallCars = RemoveLargeCars(CarType);

您可以使用扩展方法轻松地根据条件过滤掉汽车:

public static List<CarList> RemoveLargeCars(List<CarList> CarType) {
  return CarType.Select(
    t => new CarList(t.CarType, t.Cars.Where(c => c.Length < 2f).ToList() 
  ) .ToList();
}

请注意,该方法不会更改原始列表,而是创建一个新列表。

于 2012-05-19T08:21:55.657 回答