2012-02-06 12 views
1

Фон ...Динамически создавая X количество объектов класса

Допустим, у меня есть класс под названием автомобили. Мы просто собираемся хранить название автомобиля и удостоверение личности. Позволяет также сказать, у меня есть страница администратора на основе класса администратора, который я установил общее количество автомобилей, которые я хочу, чтобы создать в междунар называемых 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. 
     } 
+0

Зачем вам это нужно? Почему бы не просто «Список »? Если код, генерирующий поля, является динамическим, как может остальная часть кода ожидать, что эти поля будут там? – Lukazoid

+0

Добавление в список ? –

+0

Почему вы хотите создать такой список, который хотите получить на разных страницах? Вам нужно нажать этот список в области сеанса или приложения :( – adatapost

ответ

4

Это следует размежевать трюк:

int CarCount = 100; 
Car[] Cars = Enumerable 
      .Range(0, CarCount) 
      .Select(i => new Car { Id = i, Name = "Chevy " + i }) 
      .ToArray(); 

С уважением GJ

Edit

Если вы просто хотите знать, как вы могли бы сделать такую ​​вещь (которую вы не должны), попробуйте следующее:

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.

+0

ok, список наиболее скорее всего, лучшее решение, а также добавление базы данных в приложение, но это не ответило на окончательный вопрос. Вопрос был связан с использованием класса автомобилей для динамического создания X числа автомобилей. –

+0

Пример ... Лекты говорят, что у меня есть a int totalCars = 100. Затем я хочу создать Cars car1 = new Cars(); Cars car2 = new Cars(); ............. Автомобили car100 = new Cars(); Pa Этот вопрос связан с обучением, а не только с лучшей практикой. –

+0

Что вы просите - это генерация кода, но я уверен, что вы задаете неправильный вопрос. Что вы хотите сделать таким образом? Было бы противно программировать. – 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; 
       } 
      ); 
     }   
    } 
Смежные вопросы