#c_sharp #winforms #list
У меня есть две формы, одна добавляет в лист данные, вторая считывает, как можно это реализовать?
Ответы
Ответ 1
как-то так static class InnerData { static public List AllData = new List(); } добавление InnerData.AllData.Add(data); чтение foreach(Data data in InnerData.AllData) { //something }Ответ 2
Насколько я понимаю, Вам нужно создать некий объект, функцией которого будет хранить данные, которыми могут пользоваться другие объекты Вашего приложения. Следовательно Вам нужен объект, экземпляр которого будет единым для всего приложения, и будет создан единожды. А если ожидается работа из нескольких потоков с полями, свойствами и методами этого класса, то этот класс должен ещё и обеспечивать потокобезопасность. Для решения этой задачи отлично подходит такой паттерн, как Singleton (Одиночка). using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace ConsoleApplication { public class MyDataClass { public String MyProperty { get; set; } } public sealed class ConcurrentDataSingleton { ////// Объект для обеспечения потокобезопасного доступа к полям одиночки /// private readonly static object _lockObject = new object(); ////// Коллекция данных /// private List_data; /// /// Статическое поле, хранящее ссылку на объект одиночки в управляемой куче /// private static ConcurrentDataSingleton instance; ////// Метод получения ссылки на объект-одиночку /// ///public static ConcurrentDataSingleton GetInstance() { if (instance == null) instance = new ConcurrentDataSingleton(); return instance; } /// /// Закрытый конструктор, инициализирующий поля класса /// private ConcurrentDataSingleton() { this._data = new List(); } /// /// Метод добавления объекта в коллекцию (потокобезопасно) /// /// Объект данных public void AddData(MyDataClass data) { lock (_lockObject) { this._data.Add(data); } } ////// Метод получения данных (потокобезопасно) /// /// Условие, по которому следует выбирать объекты из коллекции ///public List GetData(Expression > predicate) { lock (_lockObject) { return this._data.AsQueryable().Where(predicate).ToList(); } } } class Program { public static void Main() { //получаем ссылку на хранилище данных ConcurrentDataSingleton dataStore = ConcurrentDataSingleton.GetInstance(); //Добавление данных dataStore.AddData(new MyDataClass() { MyProperty = "value" }); //Получение данных List dataThatINeed = dataStore.GetData(mdc => mdc.MyProperty == "value"); } } }
Комментариев нет:
Отправить комментарий