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

C# 关于C中列表范围的问题#,c#,list,scope,C#,List,Scope,我有一个私有函数Load,它创建一个列表,创建几个对象,然后将datagrid绑定到列表。代码类似于: 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)); _

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

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
}

我得到一个错误,即汽车在当前环境中不存在。我是否可以进行更改,使列表在全球范围内可用?也许我可以在其他地方定义它?

好吧,这与列表本身无关。它是一般变量范围。您没有说明在哪里声明了
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
        {
            ...
        }
    }
}
公共类测试
{
私家车名单;
public void PopulateDataSource()
{
汽车=新名单
{
新车(“福特”、“野马”,1967年),
新车(“谢尔比AC”,“眼镜蛇”,1965年),
新车(“雪佛兰”,“克尔维特斯汀雷”,1965年)
};
_dgCars.DataSource=cars;
}
公共车辆
{
foreach(Car-Car-in-cars)//使用foreach循环列表
{
...
}
}
}

好吧,这与列表本身无关。它是一般变量范围。您没有说明在哪里声明了
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
        {
            ...
        }
    }
}
公共类测试
{
私家车名单;
public void PopulateDataSource()
{
汽车=新名单
{
新车(“福特”、“野马”,1967年),
新车(“谢尔比AC”,“眼镜蛇”,1965年),
新车(“雪佛兰”,“克尔维特斯汀雷”,1965年)
};
_dgCars.DataSource=cars;
}
公共车辆
{
foreach(Car-Car-in-cars)//使用foreach循环列表
{
...
}
}
}

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

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

oftype表达式如何

public void IterateThroughCars()
{
    foreach (var car in _dgCars.DataSource.OfType<Car>()) // Loop through List with foreach
    {
        ...
    }
}
public void iteratethrowcars()
{
foreach(在dgCars.DataSource.OfType()中的var car)//使用foreach循环列表
{
...
}
}

oftype表达式如何

public void IterateThroughCars()
{
    foreach (var car in _dgCars.DataSource.OfType<Car>()) // Loop through List with foreach
    {
        ...
    }
}
public void iteratethrowcars()
{
foreach(在dgCars.DataSource.OfType()中的var car)//使用foreach循环列表
{
...
}
}

foreach循环不适用于列表,因为列表不包含.Length属性。 如果您想在列表中迭代,请使用for循环或while循环,如下所示

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

for(int i=0;iforeach循环不能与list一起工作,因为list不包含.Length属性。
如果您想在列表中迭代,请使用for循环或while循环,如下所示

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

for(int i=0;ior)您可以将列表传递给另一个方法,该方法也可以访问列表内容。或者您可以将列表传递给另一个方法,该方法也可以访问列表内容。