2010-11-30 4 views
0
  1. Я создал класс (ConflictingBooking), который содержит поля для различной информации в отношении конкретного резервирования.
  2. Я просматриваю базу данных и выбираю определенные оговорки на основе определенных критериев.
  3. Я хочу создать экземпляр класса с выбранными определенными критериями.
  4. Затем я хочу добавить каждый из этих экземпляров класса в список, который я буду использовать в другом месте.

Проблема у меня есть на шаге 3. Я хочу, чтобы имя нового экземпляра что-то вроде «нашел [я]», где я увеличивается для каждой оговорки найдено:Создание экземпляров классов во время выполнения

   ConflictingBooking found = new ConflictingBooking(); 
       found.BookingNumber = conflictingBookingNumber; 
       found.BookingStarts = conflictingBookingDT; 

       conflictingBookings.Add(found); 

В приведенном выше коде, Мне нужно заменить «найденный» программно.

Несмотря на то, что я хотел бы получить простой фрагмент кода, я также хотел бы прочитать некоторую ссылку, чтобы я знал, что я делаю :-). Я просто не знаю, как решить мою проблему.

Кажется, я не совсем понятно - здесь соответствующий код:

 dbManager.Open(); 
     dbManager.ExecuteReader(CommandType.Text, string.Format("SELECT BookingDate, {0} FROM BTable WHERE Court IN {1} AND BookingDate IN ({2})", columns, facilityIDs, bookingDates)); 
     using (IDataReader rdr = dbManager.DataReader) 
     { 
     decimal conflictingBookingNumber = 0; 
     DateTime conflictingBookingDT; 
     object result = null; 
     while (rdr.Read()) 
     { 
      for (int i = 0; i < requestedColumnNames.Count; i++) 
      { 
      result = dbManager.DataReader[requestedColumnNames[i].ToString()]; 
      if (result != null) 
       conflictingBookingNumber = Convert.ToDecimal(result); 

      result = dbManager.DataReader["BookingDate"]; 
      if (result != null) 
       conflictingBookingDT = Convert.ToDateTime(result); 

      if (conflictingBookingNumber > 0) 
      { 
       int next = conflictingBookings.Count + 1; 


       ConflictingBooking found = new ConflictingBooking(); 
       found.BookingNumber = conflictingBookingNumber; 
       found.BookingStarts = conflictingBookingDT; 

       // conflictingBookings is a List<conflictingBooking> 
       conflictingBookings.Add(found); 
      } 
      } 
     } 
     } 

Надежда, что проясняет мою проблему.

+0

Что именно вы «замените найденным программным путем»? Я понимаю, что фрагмент кода, который вы предоставляете, будет охватываться в какой-то итерации, где вы будете заполнять свою коллекцию. Не могли бы вы прояснить? – JohnP 2010-12-01 00:09:16

+0

Так в чем же проблема с вашим кодом? Оператор `new` выполняет именно это - создает новый экземпляр класса. Возможно, это поможет, если вы уточните * почему * вам нужно заменить «found», который является именем переменной. – Serguei 2010-12-01 00:10:29

ответ

2

Я думаю, что все, что вы ищете, это поставить ваш код в цикл for. Я мог бы быть полностью недопонимание вас, но это, кажется, как будто вы хотите сделать что-то вроде этого

int i = 0; 
foreach(var result in resultSet) 
{ 
    ConflictingBooking found = new ConflictingBooking(); 
    found.BookingNumber = conflictingBookingNumber; 
    found.BookingStarts = conflictingBookingDT; 
    found.Name = "found["+i++ +"]"; 

    conflictingBookings.Add(found); 
} 

Если это не то, что вы хотите, пожалуйста, уточнить ваш вопрос

0

Простое решение: Добавить счетчик цикла в конструкторе:

ConflictingBooking found = new ConflictingBooking(i); 

Затем добавьте метод (или переопределить ToString()), чтобы вернуть строку сцепленного имя экземпляра.

+0

Я был бы очень удивлен, если бы это было трудное решение для тех, у кого был опыт в этом случае, однако я всегда был в состоянии избежать этой ситуации в прошлом, но думал, что пришло время, когда я столкнулся с этим :-). Есть ли вероятность, что вы разместите код, который вы предлагаете, используя мой пример в вопросе. – David 2010-12-01 00:05:11

+0

Митч - Я понятия не имею, о чем вы говорите! – David 2010-12-01 00:20:39

1

имена переменных существуют только для удобства к программист, и на самом деле не существует во время выполнения. Вы не можете создавать фактические переменные во время выполнения.

Однако, поскольку вы заполняете список, вы должны иметь все данные, необходимые для создания «имени» для целей отображения на основе индекса. Например:

for(int i = 0; i < conflictingBookings.Length; i++) 
{ 
    Console.WriteLine("found[" + i + "]: " + found.BookingNumber); 
} 
Смежные вопросы