Динамически создавая число объектов класса X - PullRequest
1 голос
/ 06 февраля 2012

Фон ...

Допустим, у меня есть класс под названием автомобили. Мы просто собираемся сохранить имя автомобиля и удостоверение личности. Допустим также, что у меня есть страница администратора, основанная на классе администратора, в котором я задаю общее количество машин, которые я хочу создать, в int с именем totalCars

Вопрос: Как динамически создавать автомобили в виде полей, к которым можно получить доступ из любого места кода, и в то же время создавать общее количество автомобилей на основе количества в 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.
      }

Ответы [ 2 ]

4 голосов
/ 06 февраля 2012

Это должно быть подвохом:

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.

2 голосов
/ 06 февраля 2012

Используйте 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;
                }
              );
      }          
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...