Глюк массива 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 } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д