2014-01-28 126 views
0

例如,我们有下一个类:如何使用变量作为名称从类创建对象?

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内创建Car例如我的下一个代码,但没有成功

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

您可以初始化您的对象的集合,并在每次循环中添加它 – aw04

回答

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; } 
} 

或者,你可以使用类属性初始化设置作出财产,

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

试过了,你不能访问的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); 
} 
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); 
} 
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(); 
+0

此代码是错误的。你正在转换成Car []而不是字符串[]。 – Dismissile

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; 
    } 
} 
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 }); 
0

这应该工作:

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

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

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

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