动态创建X个类对象

3

背景...

假设我有一个名为cars的类。我们只需要存储汽车名称和ID。 还假设我有一个基于admin类的管理页面,我在一个名为totalCars的int中设置要创建的汽车总数。

问题: 如何动态地创建汽车作为可以从代码中任何位置访问的字段,同时根据totalCars中的数字创建汽车的总数?

示例代码:

      Cars car1 = new Cars();
      int totalCars;
      //Somehow I want to create cars objects/fields based on the 
      //number in the totalCars int
      protected void Page_Load(object sender, EventArgs e)
      {
          car1.Name = "Chevy";
          car1.ID = 1;

      }

      protected void Button1_Click(object sender, EventArgs e)
      {
         TextBox1.Text = car1.Name.ToString();
         //this is just a sample action.
      }

为什么你想要这样做呢?为什么不只是有一个 List<Car> 呢?如果生成字段的代码是动态的,那么其他代码如何期望这些字段存在呢? - Lukazoid
为什么你想要创建这样的列表,以便在不同的页面中访问它?你需要将该列表推送到会话或应用程序范围中 :( - KV Prajapati
我之所以这样处理问题,是因为我可能有5000个汽车对象。并非每位用户都应该在后面看到每辆汽车。我担心List<car>太大,会拖慢系统/使用过多的内存。 - Code Smack
如果你已经到了这一步,那么你应该拥有一个数据库;你不应该将那种类型的信息持久化在内存中。 - Servy
2个回答

8
这应该就可以了:
int CarCount = 100;
Car[] Cars = Enumerable
            .Range(0, CarCount)
            .Select(i => new Car { Id = i, Name = "Chevy " + i })
            .ToArray();

致敬 GJ

编辑

如果你只是想知道如何做这样的事情(虽然你不应该这样做),请尝试以下操作:

using System.IO;

namespace ConsoleApplication3 {

    partial class Program {

        static void Main(string[] args) {
            Generate();
        }

        static void Generate() {

            StreamWriter sw = new StreamWriter(@"Program_Generated.cs");
            sw.WriteLine("using ConsoleApplication3;");
            sw.WriteLine("partial class Program {");

            string template = "\tCar car# = new Car() { Id = #, Name = \"Car #\" };";
            for (int i = 1; i <= 100; i++) {
                sw.WriteLine(template.Replace("#", i.ToString()));
            }

            sw.WriteLine("}");
            sw.Flush();
            sw.Close();
        }
    }    

    class Car {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

请注意关键字partial class,这意味着您可以拥有跨多个源文件的类。现在您可以手动编写其中一个,并生成另一个。
如果您运行此代码,它将生成以下代码:
using ConsoleApplication3;
partial class Program {
    Car car1 = new Car() { Id = 1, Name = "Car 1" };
    Car car2 = new Car() { Id = 2, Name = "Car 2" };
    ...
    Car car99 = new Car() { Id = 99, Name = "Car 99" };
    Car car100 = new Car() { Id = 100, Name = "Car 100" };
}

您可以将此代码文件添加到您的解决方案中(右键单击项目..添加现有..),然后进行编译。现在,您可以使用这些变量 car1 .. car100。


好的,列表很可能是最好的解决方案。除此之外,还要将数据库添加到应用程序中。然而这并没有回答最终问题。问题与使用车辆类动态创建X辆汽车相关。 - Code Smack
假设我有一个int totalCars = 100。然后我想创建Cars car1 = new Cars(); Cars car2 = new Cars(); ............. Cars car100 = new Cars(); 这个问题的一部分与学习有关,而不仅仅是最佳实践。 - Code Smack
你所要求的是代码生成,但我相信你问错了问题。你想通过这种方式做什么?这将会很难进行编程。 - gjvdkamp
仅供学术目的,以下是有关编程的内容示例。 - gjvdkamp

2

使用 List<Cars>

  List<Cars> cars = new List<Cars>();
  int totalCars;

  protected void Page_Load(object sender, EventArgs e)
  {
      cars = new List<Cars>();
      for(int i=0; i<totalCars; i++)
      {  
           cars.Add(
              new Cars()
                {
                  Name = "Car #" + i;
                  ID = i;
                }
              );
      }          
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接