如何使用变量作为名称从类创建对象?

时间:2014-01-28 21:06:08

标签: c# class constructor

例如我们有下一堂课:

class Car
{
    public string Make { get; set; }
    public string Model {get;set;}
    public int Year {get;set;}
    public string Color {get;set;}
}

一个有几个车型的阵列:

string[] cars = { "Honda", "BMW", "Audi"};

我想为数组中的每个项创建一个对象。我已尝试使用下一个代码,但没有成功

foreach (var item in cars)
{
    Car item = new Car();
}

8 个答案:

答案 0 :(得分:2)

您不能在循环中使用相同的变量item。此外,实例并未真正使用,因为一旦循环结束它们就会消失。

您可能希望使用LINQ (a library used to manipulation collections)并将字符串名称映射到Car个对象的集合,

var makes = { "Honda", "BMW", "Audi" };
var cars = makes.Select(make => new Car(make));

要使其工作,您需要在类中添加一个构造函数,该构造函数带有制造商名称,

public class Car
{
    public Car(string make)
    { 
        this.Make = make;
    }

    public string Make { get; set; }
    public string Model {get; set; }
    public int Year { get; set; }
    public string Color { get; set; }
}

或者,您可以使用类属性初始值设定项来设置Make属性

var makes = { "Honda", "BMW", "Audi" };
var cars = makes.Select(make => new Car { Make = make });

答案 1 :(得分:1)

如果您在Car内创建foreach实例,则无法访问foreach范围之外的这些实例。首先创建一个Car List

var carList = new List<Car>();

然后使用for循环:

for(int i=0; i<cars.Length; i++)
{
   Car item = new Car();
   item.Make = cars[i];
   // set other properties
   carList.Add(item);
}

答案 2 :(得分:1)

您需要在汽车上设置一些信息,并在某处存储所有实例。

        string[] carMakes = { "Honda", "BMW", "Audi" };
        List<Car> cars = new List<Car>();

        foreach (var carMake in carMakes)
        {
            cars.Add(new Car(){Make = carMake});
        }

答案 3 :(得分:0)

这个怎么样:

class Car
{
    public string Make { get; set; }
    public string Model {get;set;}
    public int Year {get;set;}
    public string Color {get;set;}

    public Car(string make)
    {
        Make = make;
    }
}

现在为你的循环:

List<Car> cars = new List<Car>();
foreach (var item in cars)
{
    Car car = new Car(item);
    cars.Add(car);
}

答案 4 :(得分:0)

您可以使用一些额外的代码在一行中执行此操作

Car[] cars = new [] { new Car {Make = "Honda"}, 
                         new Car {Make = "BMW"}, 
                         new Car {Make = "Audi"}
                       };

或Linq投影:

string[] cars = { "Honda", "BMW", "Audi"};
Car[] cars = cars.Select(s => new Car {Make = s})
                 .ToArray();

答案 5 :(得分:0)

在您的类中添加一个接受'make'参数的构造函数。将其设置为实例上的Make成员。

class Car
{
    public string Make { get; set; }
    public string Model {get;set;}
    public int Year {get;set;}
    public string Color {get;set;}

  public Car(string make)
  {
       this.Make = make;
  }
}

答案 6 :(得分:0)

您可以像这样构建每辆车:

foreach (var item in cars)
{
    // Note that you can't reuse 'item' here
    Car newCar = new Car { Make = item };
}

您需要将每个newCar放入列表中,或者在循环中对其执行某些操作。

您也可以使用LINQ在一行中执行此操作:

var carList = cars.Select(x => new Car { Make = x });

答案 7 :(得分:0)

这应该有效:

foreach (string name in cars)
{
    Car item = new Car() { Make = name };
}