Глюк массива 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 }
}