Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 22445|Ответ: 0

[Источник] Использование универсальных классов коллекций (Ilist, IDictionary) в C#

[Скопировать ссылку]
Опубликовано 10.04.2015 17:22:50 | | |

IDictionary является базовым интерфейсом для общей коллекции пар ключ/значение, каждая из которых является парой ключ-значение в объекте keyValuePair.

Каждая пара должна иметь уникальный ключ. Реализация отличается тем, разрешает ли ключ быть пустой ссылкой (в Visual Basic нет ничего). Это значение может быть пустой ссылкой (Nothing в Visual Basic) и не обязательно должно быть уникальным. Интерфейс IDictionary позволяет перечислять ключи и значения, содержащиеся в нём, но это не подразумевает какого-либо конкретного порядка сортировки.

Оператор foreach в языке C# (For Each в Visual Basic и для каждого в C++) требует типа каждого элемента в коллекции. Поскольку каждый элемент IDictionary является парой ключ/значение, тип элемента не является ни типом ключа, ни типом значения. Вместо этого это тип KeyValuePair.



Вот простой пример программы



Класс сущности:

Домен пространства имён
{

//订单
    Орден общественного класса
    {
        public int OrderID { get; декорация; }

        /// <summary>
        Дата заказа
        /// </summary>
        public DateTime OrderDate { get; декорация; }

        /// <summary>
        Адрес заказа
        /// </summary>
        public string OrderAaddress { get; декорация; }

        /// <summary>
        Заказать телефон
        /// </summary>
        public string OrderTel { get; декорация; }
    }
}



//订单明细


Домен пространства имён
{
    Порядок общественного класса Подробности
    {
        public int DetailID { get; декорация; }

        public int ProductID { get; декорация; }

        /// <summary>
        Количество
        /// </summary>
        public decimal Quantity { get; декорация; }

        /// <summary>
        Цена единицы
        /// </summary>
        публичная десятичная цена { get; декорация; }
    }
}



//存放数据

используя System;
с использованием System.Collections.Generic;
с использованием System.Linq;
с использованием System.Text;
с использованием домена;

Сервис пространства имён
{
    публичный статический класс OrderStock
    {
        приватный статический IList<Order> m_orderList = новый List<Order>(); Определим общее поле для списка

        публичный статический<Order> IList OrderList// определяет общее свойство списка
        {
            Получить
            {
                возвращение m_orderList;
            }
            Набор
            {
                m_orderList = значение;
            }
        }

        private static IDictionary<Order, IList<OrderDetail>> m_orders = новый словарь<порядок, IList<OrderDetail>>();

//定义了一个Dictionary的泛型字段,

        public static IDictionary<Order, IList<OrderDetail>> Orders/ определяет общее свойство словаря
        {
            Получить
            {
                возвращение m_orders;
            }
            Набор
            {
                m_orders = значение;
            }
        }
    }
}



Интерфейсы сервисов

используя System;
с использованием домена;
Сервис пространства имён
{
    публичный интерфейс IOrderService
    {

//删除
        void Delete(сущность Domain.Order);

       Запросить все
        System.Collections.Genereric.IList<Domain.Order> LoadAll();

//保存
        объект Save(сущность Domain.Order);

//更新
        void Update (сущность Domain.Order);

  Запрос по ID
        Order Get(object id);

//获取下一个ID
        объект GetNextID();
    }



Сервис пространства имён
{
    публичный интерфейс IOrderDetailService
    {
        void Delete(System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> сущность);
        System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> Get(идентификатор объекта);
        объект GetNextDetailID(object mainID);
        объект GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Genereric.IList<Domain.OrderDetail>> LoadAll();
        object Save(сущность Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail> детали);
        void update(System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> сущность);
    }
}



Реализация сервиса

используя System;
с использованием System.Collections.Generic;
с использованием System.Linq;
с использованием System.Text;
с использованием домена;

Сервис пространства имён
{
    публичный класс OrderService : IOrderService
    {
        <Order> публичный IList LoadAll()
        {
            var list = OrderStock.OrderList;

            список возвратов;
        }

        публичный объект GetNextID()
        {
            int id = 1;
            if (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            идентификатор возврата;
        }

        Сохранение публичного объекта (сущность порядка)
        {
            OrderStock.OrderList.Add(сущность);

            Возврат сущности. OrderID;
        }

        Обновление публичной пустоты (Сущность порядка)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == сущность. OrderID);

            если (список. Count<Order>() > 0)
            {
                Порядок порядка = список. Во-первых();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = сущность;
            }
        }

        Общественный порядок Get(идентификатор объекта)
        {
            Сущность порядка = нулевая;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            если (список. Count<Order>() > 0)
            {
                Порядок порядка = список. Во-первых();
                entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)];
            }
            сущность возврата;
        }

        public void Delete (Сущность порядка)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == сущность. OrderID);
            если (список. Count<Order>() > 0)
            {
                Порядок порядка = список. Во-первых();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





используя System;
с использованием System.Collections.Generic;
с использованием System.Linq;
с использованием System.Text;
с использованием домена;

Сервис пространства имён
{
    публичный класс OrderDetailService : IOrderDetailService
    {
        Public IDictionary<Order, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            Return dic;
        }

        публичный объект GetNextID()
        {
            int id = 1;
            если (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            идентификатор возврата;
        }

        публичный объект GetNextDetailID(object mainID)
        {
            int id = 1;
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)mainID);
            если (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                var item = dic.First();
                var list = предмет. Value.Where(w => w.DetailID == (int)mainID);
                если (список. Count<OrderDetail>() > 0)
                {
                    id = список. Во-первых(). DetailID + 1;
                }
            }
            идентификатор возврата;
        }

        Сохранение публичного объекта (сущность порядка,<OrderDetail> детализация IList)
        {
            object result = null;
            если (! OrderStock.Orders.ContainsKey(сущность))
            {
                OrderStock.Orders.Add(сущность, деталь);
                результат = сущность. OrderID;
            }
            результат возврата;
        }

        Обновление публичной пустоты (KeyValuePair<Order, <OrderDetail>IList> сущность)
        {
            если (OrderStock.Orders.ContainsKey(entity. Ключ))
            {
                OrderStock.Orders[entity. Ключ] = сущность. Ценность;
            }
        }

        public KeyValuePair<Order, IList<OrderDetail>> Get(object id)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> сущность = новый KeyValuePair<Order, IList<OrderDetail>>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            если (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                сущность = dic.First();
            }
            
            сущность возврата;
        }

        public void Delete(KeyValuePair<Order, <OrderDetail>IList> сущность)
        {
            если (OrderStock.Orders.ContainsKey(entity. Ключ))
            {
                OrderStock.Orders.Redelete(сущность. Ключ);
            }
        }
    }
}



Тест

используя System;
с использованием System.Collections.Generic;
с использованием System.Linq;
с использованием System.Text;
с использованием NUnit.Framework;
использование сервиса;
с использованием домена;

пространство имён ServiceTest
{
    [Тестовый прибор]
    публичный класс OrderServiceTest
    {
        частный IOrderService m_service;

        [Настройка]
        Публичная пустота Init()
        {
            m_service = новый OrderService();
        }

        [Тест]
        public void LoadAllTest()
        {
           VAR List= m_service. LoadAll();
           Foreach (элемент VAR в списке)
           {
               Console.WriteLine (пункт. OrderID);
               Console.WriteLine (пункт. Адрес заказа);
               Console.WriteLine (пункт. OrderDate);
               Console.WriteLine (пункт. OrderTel);
           }
           Assert.IsNotNull(list);
        }

        [Тест]
        Сохранение публичной пустоты()
        {
            Сущность порядка = новый Order()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = «Урумчи»,
                OrderTel = "123123"
            };
            объект obj = m_service. Сохранить (сущность);
           
            Assert.IsNotNull(obj);
        }

        [Тест]
        Обновление публичной пустоты()
        {
            Сущность порядка = m_service. Get(1);
            сущность. OrderAaddress = «Корла»;
            m_service. Обновление (сущность);
        }

        [Тест]
        public void Delete()
        {
            Сущность порядка = m_service. Get(1);
            сущность. OrderAaddress = «Корла»;
            m_service. Удалить (сущность);
        }
    }
}



используя System;
с использованием System.Collections.Generic;
с использованием System.Linq;
с использованием System.Text;
с использованием NUnit.Framework;
использование сервиса;
с использованием домена;

пространство имён ServiceTest
{
    [Тестовый прибор]
    публичный класс OrderServiceDetailTest
    {
        частный IOrderDetailService m_service;

        [Настройка]
        Публичная пустота Init()
        {
            m_service = новый OrderDetailService();
        }

        [Тест]
        public void LoadAllTest()
        {
           VAR List= m_service. LoadAll();
           Foreach (элемент VAR в списке)
           {
               Console.WriteLine("-------------- Order ----------");
               Console.WriteLine (пункт. Key.OrderID);
               Console.WriteLine (пункт. Key.OrderAaddress);
               Console.WriteLine (пункт. Key.OrderDate);
               Console.WriteLine (пункт. Key.OrderTel);
               Console.WriteLine("-------------- Order Detail ----------");
               foreach (var li in item. Ценность)
               {
                   Console.WriteLine(li.DetailID);
                   Console.WriteLine (li.Price);
                   Console.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(list);
        }

        [Тест]
        Сохранение публичной пустоты()
        {
            int id = (int)m_service. GetNextID();
            Сущность порядка = новый Order()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = «Урумчи»,
                OrderTel = "123123"
            };
            <OrderDetail> IList list = новый List<OrderDetail>();
            для (int i = 0; I < 3; i++)
            {
                Список. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Цена=10+i,
                    Quantity=i+100,
                    ProductID = 1000 + i
                });
            }
            объект obj = m_service. Сохранить (сущность, список);
           
            Assert.IsNotNull(obj);
        }

        [Тест]
        Обновление публичной пустоты()
        {
            var сущность = m_service. Get(1);

            сущность. Value[0] = новый OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Цена = 13,34 млн,
                Количество = 200,1 млн
            };
            m_service. Обновление (сущность);
        }

        [Тест]
        public void Delete()
        {
            var сущность = m_service. Get(1);
            m_service. Удалить (сущность);
        }
    }
}



Примечание: при тестировании нужно обращаться к инструменту nunit.framework




Предыдущий:Используйте два инструмента CC-атак, хорошие для стресс-тестирования
Следующий:Би Фуцзянь опубликовал письмо с извинениями на Weibo: Я чувствую себя очень виноватым и грустным
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com