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

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

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

Здравствуйте, все! Написал приложение, в котором много и много раз использую массив типа list<T> и везде он работает правильно. Но вот в одном месте глючит. При добавлении элемента в массив, массив увеличивается, но все элементы массива с нулевого по последний получают значение последнего элемента. Может кто-то встречался с таким явлением? Подскажите, как с ним бороться.
        
public List<Messanger> GetMessages(RequestMessagesBuilder builder)
        {
            List<Messanger> result = new List<Messanger>(); //создаём массив
 
            try
            {
                statistic_database.Open();
                FbCommand command = new FbCommand(builder.ToString(), statistic_database);
                FbDataReader reader = command.ExecuteReader();
                MessageType messtype = MessageType.Info;
                while (reader.Read())
                {
                    int id = reader.GetInt32(0);                    // Message_ID
                    DateTime time_start = reader.GetDateTime(1);    // TIME_START
                    string messageText = reader.GetString(2);       // Текст сообщения
                    string messageType = reader.GetString(3);       // Тип сообщения
                    switch(messageType)
                    {
                        case "Error":
                            messtype = MessageType.Error;
                            break;
                        case "Info":
                            messtype = MessageType.Info;
                            break;
                        case "Warning":
                            messtype = MessageType.Warning;
                            break;
                        default: break;
                    }
                    Messanger entry = new Messanger(id, time_start, messageText, messtype); //получаем данные для записи в массив. Они разные и правильные.
                    result.Add(entry);// Добавляем запись в массив. Количество элементов увеличивается, но все элементы массива имеют значение последней записи.
                }
                statistic_database.Close();
            }
            catch (Exception ex)
            {
                statistic_database.Close();
                throw ex;
            }
            return result;
        }

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
 
namespace HainzInspections.Kernel {
    public class Messanger {
        // Сводка:
        //      Выводит на экран стандартное сообщение об ошибке с указанным пользователем текстом. 
        // Возращает:
        //      Результат завершения выведенного окна DialogResult.
        static App app;
        public Messanger()
        { }
        public Messanger(App _app)
        {
            app = _app;
        }
        public Messanger(int messageID, DateTime time_start, string messageText, MessageType messageType)
        {
            EntryMessangerConstructor(messageID, time_start, messageText, messageType);
        }
 
        private void EntryMessangerConstructor(int messageID, DateTime time_start, string messageText, MessageType messageType)
        {
            _messageID = messageID;
            _startTime = time_start;
            _messageText = messageText;
            _messageType = messageType;
        }
 
        public Messanger ToMessanger()
        {
            //int id, DateTime tstart, DateTime tend, string oper, string product, double weight, int inspectionID, int type, string line, string note
            return new Messanger(_messageID, _startTime, _messageText, _messageType);
        }        
        
        private static Messanger message = new Messanger(app);
 
        public static void SaveMessage()
        {
            message.StartTime = DateTime.Now;
            message.MessageText = _messageText;
            message.MessageType = _messageType;
            app.ManagerDb.WriteMessageToDB(message);
        }
 
        private static int _messageID;
        public int MessageID
        {
            get { return _messageID; }
            set { _messageID = value; }
        }
 
        private static DateTime _startTime;
        public DateTime StartTime
        {
            get { return _startTime; }
            set { _startTime = value; }
        }
 
        private static string _messageText;
        public string MessageText
        {
            get { return _messageText; }
            set { _messageText = value; }
        }
        private static MessageType _messageType;
        public MessageType MessageType
        {
            get { return _messageType; }
            set { _messageType = value; }
        }
 
        public static DialogResult ShowError(string message) 
        {
            Messanger._messageText = message;
            Messanger._messageType = MessageType.Error;
            SaveMessage();
            string caption = "HainzInspections - Сообщение об ошибке";
            MessageBoxButtons buttons = MessageBoxButtons.OK;
            MessageBoxIcon icon = MessageBoxIcon.Exclamation;
            return MessageBox.Show(message, caption, buttons, icon);
        }
 
        // Сводка:
        //      Выводит на экран стандартное сообщение-предупреждение с указанным пользователем текстом. 
        // Возращает:
        //      Результат завершения выведенного окна DialogResult.
        public static DialogResult ShowWarning(string message) 
        {
            Messanger._messageText = message;
            Messanger._messageType = MessageType.Error;
            SaveMessage();
            string caption = "HainzInspections - предупреждение";
            MessageBoxButtons buttons = MessageBoxButtons.OK;
            MessageBoxIcon icon = MessageBoxIcon.Warning;
            return MessageBox.Show(message, caption, buttons, icon);
        }
 
        // Сводка:
        //      Выводит на экран стандартное информационное сообщение с указанным пользователем текстом.
        // Возращает:
        //      Результат завершения выведенного окна DialogResult.
        public static DialogResult ShowInformation(string message) 
        {
            Messanger._messageText = message;
            Messanger._messageType = MessageType.Error;
            SaveMessage();
            string caption = "HainzInspections - Информационное сообщение";
            MessageBoxButtons buttons = MessageBoxButtons.OK;
            MessageBoxIcon icon = MessageBoxIcon.Information;
            return MessageBox.Show(message, caption, buttons, icon);
        }
 
        // Сводка:
        //      Выводит на экран сообщение с вопросом, указанным в качестве входного параметра.
        // Входные аргументы:
        //      1. Вопрос, которые будет представлен пользователю (string).
        //      2. Кнопки возможных ответов (MessageBoxButtons).
        // Возвращает:
        //      Результат завершения выведенного вопроса (окна) DialogResult.
        public static DialogResult ShowQuestion(string message, MessageBoxButtons buttons) {
            MessageBoxIcon icon = MessageBoxIcon.Question;
            string caption = "HainzInspections - Вопрос";
            return MessageBox.Show(message, caption, buttons, icon);
        }
    }
    public enum MessageType { Error = 0, Warning = 1, Info =2 }
}

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


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

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

12   голосов , оценка 4.25 из 5
Похожие ответы