Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 22445|Отговор: 0

[Източник] Използването на общи колекционни класове (Ilist, IDictionary) в C#

[Копирай линк]
Публикувано в 10.04.2015 г. 17:22:50 ч. | | |

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

Всяка двойка трябва да има уникален ключ. Имплементацията се различава по това дали ключът трябва да бъде празна референция (няма нищо във Visual Basic). Тази стойност може да бъде празна референция (Нищо във Visual Basic) и не е задължително да е уникална. IDictionary интерфейсът позволява изброяване на ключовете и стойностите, които съдържа, но това не означава конкретен ред на сортиране.

Операторът foreach в езика C# (За всеки във 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 = стойност;
            }
        }

        private static IDictionary<Order, IList<OrderDetail>> m_orders = нов речник<ред, IList<OrderDetail>>();

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

        public static IDictionary<Order, IList<OrderDetail>> Orders/ дефинира общо свойство на речник
        {
            Вземи
            {
                връщане m_orders;
            }
            Комплект
            {
                m_orders = стойност;
            }
        }
    }
}



Интерфейси за услуги

използвайки System;
използвайки Domain;
Услуга за пространство от имена
{
    public interface IOrderService
    {

//删除
        void Delete(Domain.Order entity);

       Заявка за всички
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        обект Save(Domain.Order entity);

//更新
        void Update (Domain.Order entity);

  Заявка по ID
        Order Get(object id);

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



Услуга за пространство от имена
{
    публичен интерфейс IOrderDetailService
    {
        void Delete(System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> обект);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(object id);
        обект GetNextDetailID(object mainID);
        обект GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> LoadAll();
        object Save(Domain.Order entity, System.Collections.Generric.IList<Domain.OrderDetail> detail);
        void Update(System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> обект);
    }
}



Реализация на услуги

използвайки System;
използвайки System.Collections.Generic;
използвайки System.Linq;
използвайки System.Text;
използвайки Domain;

Услуга за пространство от имена
{
    Public клас 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;
            }
            Return ID;
        }

        Public object Save (Order entity)
        {
            OrderStock.OrderList.Add(обект);

            Връщане на същността. OrderID;
        }

        Актуализация на публична празнота (Субект на поръчката)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == обект. OrderID);

            ако (списък. <Order>Брой() > 0)
            {
                Ред = списък. Първо();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = обект;
            }
        }

        Обществен ред Get(идентификатор на обект)
        {
            Обект на ред = нулев;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            ако (списък. <Order>Брой() > 0)
            {
                Ред = списък. Първо();
                entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)];
            }
            връщаща се единица;
        }

        public void Delete(Субект на поръчката)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == обект. OrderID);
            ако (списък. <Order>Брой() > 0)
            {
                Ред = списък. Първо();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





използвайки System;
използвайки System.Collections.Generic;
използвайки System.Linq;
използвайки System.Text;
използвайки Domain;

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

            Връщане на DIC;
        }

        публичен обект GetNextID()
        {
            int id = 1;
            ако (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            Return ID;
        }

        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 елемент = dic.First();
                var list = елемент. Value.Where(w => w.DetailID == (int)mainID);
                ако (списък. <OrderDetail>Брой() > 0)
                {
                    id = списък. Първо(). ДетайлID + 1;
                }
            }
            Return ID;
        }

        Public object Save (Order entity,<OrderDetail> IList detail)
        {
            обектен резултат = null;
            ако (! OrderStock.Orders.ContainsKey(entity))
            {
                OrderStock.Orders.Add(същност, подробности);
                резултат = същност. OrderID;
            }
            резултат от връщане;
        }

        public void update (KeyValuePair<Order, <OrderDetail>IList> entity)
        {
            ако (OrderStock.Orders.ContainsKey(entity). Ключ))
            {
                OrderStock.Orders[entity. Ключ] = същност. Стойност;
            }
        }

        public KeyValuePair<Order, IList<OrderDetail>> Get(object id)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> entity = нов 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> entity)
        {
            ако (OrderStock.Orders.ContainsKey(entity). Ключ))
            {
                OrderStock.Orders.Redelete(субект. Key);
            }
        }
    }
}



Тест

използвайки System;
използвайки System.Collections.Generic;
използвайки System.Linq;
използвайки System.Text;
използвайки NUnit.Framework;
използване на Service;
използвайки Domain;

namespace ServiceTest
{
    [Тестова инсталация]
    публичен клас OrderServiceTest
    {
        частен IOrderService m_service;

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

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

        [Тест]
        Public void Save()
        {
            Субект на поръчка = нов Order()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = "Урумчи",
                OrderTel = "123123"
            };
            обект obj = m_service. Save(entity);
           
            Assert.IsNotNull(obj);
        }

        [Тест]
        Актуализация за публична празнота()
        {
            Обект на ред = m_service. Get(1);
            същност. OrderAaddress = "Корла";
            m_service. Update(entity);
        }

        [Тест]
        public void Delete()
        {
            Обект на ред = m_service. Get(1);
            същност. OrderAaddress = "Корла";
            m_service. Delete(entity);
        }
    }
}



използвайки System;
използвайки System.Collections.Generic;
използвайки System.Linq;
използвайки System.Text;
използвайки NUnit.Framework;
използване на Service;
използвайки Domain;

namespace ServiceTest
{
    [Тестова инсталация]
    публичен клас OrderServiceDetailTest
    {
        частен IOrderDetailService m_service;

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

        [Тест]
        public void LoadAllTest()
        {
           VAR списък= 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);
        }

        [Тест]
        Public void Save()
        {
            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,
                    Количество=i+100,
                    ProductID = 1000 + i
                });
            }
            обект obj = m_service. Save(entity, list);
           
            Assert.IsNotNull(obj);
        }

        [Тест]
        Актуализация за публична празнота()
        {
            var обект = m_service. Get(1);

            същност. Value[0] = нов OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Цена = 13.34M,
                Количество = 200.1M
            };
            m_service. Update(entity);
        }

        [Тест]
        public void Delete()
        {
            var обект = m_service. Get(1);
            m_service. Delete(entity);
        }
    }
}



Забележка: Трябва да се позовавате на инструмента nunit.framework при тестване




Предишен:Споделете два CC атаки, подходящи за стрес тестване
Следващ:Би Фуджиен публикува извинително писмо във Weibo: Чувствам се много виновна и тъжна
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com