关于C#中列表范围的问题

时间:2010-11-25 20:39:55

标签: c# list scope

我有一个私有函数Load,它创建一个列表,创建多个对象,然后将数据网格绑定到列表。代码类似于:

List<Car> cars = new List<Car>();
cars.Add(new Car("Ford", "Mustang", 1967));
cars.Add(new Car("Shelby AC", "Cobra", 1965));
cars.Add(new Car("Chevrolet", "Corvette Sting Ray", 1965));
_dgCars.DataSource = cars;

现在我想在另一个私有函数中循环遍历值。我尝试过类似的东西:

foreach (Car car in cars) // Loop through List with foreach
{
     // Need to access individual object properties here
}

我收到的错误是当前上下文中不存在汽车。我可以做出哪些改变,使List能够在全球范围内使用?也许我可以在其他地方定义它?

4 个答案:

答案 0 :(得分:5)

嗯,这与列表无关。这是一般变量范围。您没有显示您已声明cars变量的位置或您尝试使用它的位置 - 但我的猜测是您已将其设为局部变量,并且两个代码段不同方法

您可能希望将其设为实例变量。例如:

public class Test
{
    private List<Car> cars;

    public void PopulateDataSource()
    {
        cars = new List<Car>
        {
            new Car("Ford", "Mustang", 1967),
            new Car("Shelby AC", "Cobra", 1965),
            new Car("Chevrolet", "Corvette Sting Ray", 1965)
        };
        _dgCars.DataSource = cars;
    }

    public void IterateThroughCars()
    {
        foreach (Car car in cars) // Loop through List with foreach
        {
            ...
        }
    }
}

答案 1 :(得分:0)

是。在类级别定义列表汽车,即在私有函数之外定义(假设这两个函数在同一个类中)。

答案 2 :(得分:0)

oftype表达式怎么样?

public void IterateThroughCars()
{
    foreach (var car in _dgCars.DataSource.OfType<Car>()) // Loop through List with foreach
    {
        ...
    }
}

答案 3 :(得分:0)

foreach循环不适用于list,因为该列表不包含.Length属性。 如果你想迭代列表plz使用for循环或while循环,如下所示

for(int i=0;i<cars.Count;i++)
{
  Car objCar=cars[i];
}

我希望它能解决你的问题。