Глюк массива List - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, все! Написал приложение, в котором много и много раз использую массив типа list<T> и везде он работает правильно. Но вот в одном месте глючит. При добавлении элемента в массив, массив увеличивается, но все элементы массива с нулевого по последний получают значение последнего элемента. Может кто-то встречался с таким явлением? Подскажите, как с ним бороться.
Листинг программы
  1. public List<Messanger> GetMessages(RequestMessagesBuilder builder)
  2. {
  3. List<Messanger> result = new List<Messanger>(); //создаём массив
  4. try
  5. {
  6. statistic_database.Open();
  7. FbCommand command = new FbCommand(builder.ToString(), statistic_database);
  8. FbDataReader reader = command.ExecuteReader();
  9. MessageType messtype = MessageType.Info;
  10. while (reader.Read())
  11. {
  12. int id = reader.GetInt32(0); // Message_ID
  13. DateTime time_start = reader.GetDateTime(1); // TIME_START
  14. string messageText = reader.GetString(2); // Текст сообщения
  15. string messageType = reader.GetString(3); // Тип сообщения
  16. switch(messageType)
  17. {
  18. case "Error":
  19. messtype = MessageType.Error;
  20. break;
  21. case "Info":
  22. messtype = MessageType.Info;
  23. break;
  24. case "Warning":
  25. messtype = MessageType.Warning;
  26. break;
  27. default: break;
  28. }
  29. Messanger entry = new Messanger(id, time_start, messageText, messtype); //получаем данные для записи в массив. Они разные и правильные.
  30. result.Add(entry);// Добавляем запись в массив. Количество элементов увеличивается, но все элементы массива имеют значение последней записи.
  31. }
  32. statistic_database.Close();
  33. }
  34. catch (Exception ex)
  35. {
  36. statistic_database.Close();
  37. throw ex;
  38. }
  39. return result;
  40. }

Решение задачи: «Глюк массива List»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Windows.Forms;
  5.  
  6. namespace HainzInspections.Kernel {
  7.     public class Messanger {
  8.         // Сводка:
  9.         //      Выводит на экран стандартное сообщение об ошибке с указанным пользователем текстом.
  10.         // Возращает:
  11.         //      Результат завершения выведенного окна DialogResult.
  12.         static App app;
  13.         public Messanger()
  14.         { }
  15.         public Messanger(App _app)
  16.         {
  17.             app = _app;
  18.         }
  19.         public Messanger(int messageID, DateTime time_start, string messageText, MessageType messageType)
  20.         {
  21.             EntryMessangerConstructor(messageID, time_start, messageText, messageType);
  22.         }
  23.  
  24.         private void EntryMessangerConstructor(int messageID, DateTime time_start, string messageText, MessageType messageType)
  25.         {
  26.             _messageID = messageID;
  27.             _startTime = time_start;
  28.             _messageText = messageText;
  29.             _messageType = messageType;
  30.         }
  31.  
  32.         public Messanger ToMessanger()
  33.         {
  34.             //int id, DateTime tstart, DateTime tend, string oper, string product, double weight, int inspectionID, int type, string line, string note
  35.             return new Messanger(_messageID, _startTime, _messageText, _messageType);
  36.         }        
  37.        
  38.         private static Messanger message = new Messanger(app);
  39.  
  40.         public static void SaveMessage()
  41.         {
  42.             message.StartTime = DateTime.Now;
  43.             message.MessageText = _messageText;
  44.             message.MessageType = _messageType;
  45.             app.ManagerDb.WriteMessageToDB(message);
  46.         }
  47.  
  48.         private static int _messageID;
  49.         public int MessageID
  50.         {
  51.             get { return _messageID; }
  52.             set { _messageID = value; }
  53.         }
  54.  
  55.         private static DateTime _startTime;
  56.         public DateTime StartTime
  57.         {
  58.             get { return _startTime; }
  59.             set { _startTime = value; }
  60.         }
  61.  
  62.         private static string _messageText;
  63.         public string MessageText
  64.         {
  65.             get { return _messageText; }
  66.             set { _messageText = value; }
  67.         }
  68.         private static MessageType _messageType;
  69.         public MessageType MessageType
  70.         {
  71.             get { return _messageType; }
  72.             set { _messageType = value; }
  73.         }
  74.  
  75.         public static DialogResult ShowError(string message)
  76.         {
  77.             Messanger._messageText = message;
  78.             Messanger._messageType = MessageType.Error;
  79.             SaveMessage();
  80.             string caption = "HainzInspections - Сообщение об ошибке";
  81.             MessageBoxButtons buttons = MessageBoxButtons.OK;
  82.             MessageBoxIcon icon = MessageBoxIcon.Exclamation;
  83.             return MessageBox.Show(message, caption, buttons, icon);
  84.         }
  85.  
  86.         // Сводка:
  87.         //      Выводит на экран стандартное сообщение-предупреждение с указанным пользователем текстом.
  88.         // Возращает:
  89.         //      Результат завершения выведенного окна DialogResult.
  90.         public static DialogResult ShowWarning(string message)
  91.         {
  92.             Messanger._messageText = message;
  93.             Messanger._messageType = MessageType.Error;
  94.             SaveMessage();
  95.             string caption = "HainzInspections - предупреждение";
  96.             MessageBoxButtons buttons = MessageBoxButtons.OK;
  97.             MessageBoxIcon icon = MessageBoxIcon.Warning;
  98.             return MessageBox.Show(message, caption, buttons, icon);
  99.         }
  100.  
  101.         // Сводка:
  102.         //      Выводит на экран стандартное информационное сообщение с указанным пользователем текстом.
  103.         // Возращает:
  104.         //      Результат завершения выведенного окна DialogResult.
  105.         public static DialogResult ShowInformation(string message)
  106.         {
  107.             Messanger._messageText = message;
  108.             Messanger._messageType = MessageType.Error;
  109.             SaveMessage();
  110.             string caption = "HainzInspections - Информационное сообщение";
  111.             MessageBoxButtons buttons = MessageBoxButtons.OK;
  112.             MessageBoxIcon icon = MessageBoxIcon.Information;
  113.             return MessageBox.Show(message, caption, buttons, icon);
  114.         }
  115.  
  116.         // Сводка:
  117.         //      Выводит на экран сообщение с вопросом, указанным в качестве входного параметра.
  118.         // Входные аргументы:
  119.         //      1. Вопрос, которые будет представлен пользователю (string).
  120.         //      2. Кнопки возможных ответов (MessageBoxButtons).
  121.         // Возвращает:
  122.         //      Результат завершения выведенного вопроса (окна) DialogResult.
  123.         public static DialogResult ShowQuestion(string message, MessageBoxButtons buttons) {
  124.             MessageBoxIcon icon = MessageBoxIcon.Question;
  125.             string caption = "HainzInspections - Вопрос";
  126.             return MessageBox.Show(message, caption, buttons, icon);
  127.         }
  128.     }
  129.     public enum MessageType { Error = 0, Warning = 1, Info =2 }
  130. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы