Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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;
використовуючи Domain;

Сервіс простору назв
{
    публічний статичний клас OrderStock
    {
        приватний статичний IList<Order> m_orderList = новий List<Order>(); Визначимо загальне поле для списку

        публічний статичний<Order> IList OrderList// визначає загальну властивість List
        {
            Іди
            {
                повернення m_orderList;
            }
            сет
            {
                m_orderList = значення;
            }
        }

        приватний статичний ідентифікатор<порядок, IList<OrderDetail>> m_orders = новий словник<порядок, IList<OrderDetail>>();

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

        public static IDictionary<Order, IList<OrderDetail>> Orders/ визначає загальну властивість словника
        {
            Іди
            {
                повернення m_orders;
            }
            сет
            {
                m_orders = значення;
            }
        }
    }
}



Інтерфейси сервісів

використовуючи System;
використовуючи Domain;
Сервіс простору назв
{
    публічний інтерфейс IOrderService
    {

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

       Запит до всіх
        System.Collections.Generic.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.Generic.IList<Domain.OrderDetail>> LoadAll();
        object Save(сутність Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail> деталь);
        оновлення порожнечі (System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> сутність);
    }
}



Реалізація служби

використовуючи System;
з використанням System.Collections.Generic;
використовуючи System.Linq;
використовуючи System.Text;
використовуючи Domain;

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

            список повернення;
        }

        публічний об'єкт GetNextID()
        {
            int id = 1;
            якщо (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)
            {
                Порядок порядку = список. По-перше();
                сутність = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)];
            }
            сутність повернення;
        }

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





використовуючи System;
з використанням System.Collections.Generic;
використовуючи System.Linq;
використовуючи System.Text;
використовуючи Domain;

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

            Повернення ДІК;
        }

        публічний об'єкт GetNextID()
        {
            int id = 1;
            якщо (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            Повернення ідентифікатора;
        }

        public object 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)
        {
            результат об'єкта = 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(сутність. Key);
            }
        }
    }
}



Тест

використовуючи System;
з використанням System.Collections.Generic;
використовуючи System.Linq;
використовуючи System.Text;
використання NUnit.Framework;
використання сервісу;
використовуючи Domain;

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

        [SetUp]
        публічна порожнеча: 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(список);
        }

        [Тест]
        публічна порожнеча Збереження()
        {
            Сутність замовлення = новий Order()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = "Urumqi",
                OrderTel = "123123"
            };
            об'єкт obj = m_service. Save(сутність);
           
            Assert.IsNotNull(obj);
        }

        [Тест]
        Оновлення публічної порожнечі()
        {
            Порядок сутності = m_service. Get(1);
            сутність. OrderAaddress = «Корла»;
            m_service. Оновлення (сутність);
        }

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



використовуючи System;
з використанням System.Collections.Generic;
використовуючи System.Linq;
використовуючи System.Text;
використання NUnit.Framework;
використання сервісу;
використовуючи Domain;

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

        [SetUp]
        публічна порожнеча: 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(список);
        }

        [Тест]
        публічна порожнеча Збереження()
        {
            int id = (int)m_service. GetNextID();
            Сутність замовлення = новий Order()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = "Urumqi",
                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. Save(сутність, список);
           
            Assert.IsNotNull(obj);
        }

        [Тест]
        Оновлення публічної порожнечі()
        {
            var сутність = m_service. Get(1);

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

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



Примітка: під час тестування потрібно посилатися на інструмент nunit.framework




Попередній:Діліться двома інструментами CC-атак, добре підходить для стрес-тестування
Наступний:Бі Фуцзянь опублікував вибачення у Weibo: Я почуваюся дуже винним і сумним
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com