Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 22445|Odpověď: 0

[Zdroj] Použití obecných kolekčních tříd (Ilist, IDictionary) v C#

[Kopírovat odkaz]
Zveřejněno 10.04.2015 17:22:50 | | |

IDictionary je základní rozhraní pro obecnou kolekci párů klíč/hodnota, z nichž každý je dvojicí klíč-hodnota v objektu keyValuePair.

Každý pár musí mít jedinečný klíč. Implementace se liší v tom, zda povolit, aby klíč byl prázdnou referencí (ve Visual Basicu nic). Tato hodnota může být prázdná reference (ve Visual Basicu nic) a nemusí být jedinečná. Rozhraní IDictionary umožňuje enumeraci klíčů a hodnot, které obsahuje, ale to neznamená žádné konkrétní pořadí třídění.

Příkaz foreach v jazyce C# (For Each ve Visual Basic a for Each v C++) vyžaduje typ každého prvku v kolekci. Protože každý prvek IDictionary je pár klíč/hodnota, typ prvku není ani typem klíče, ani typem hodnoty. Místo toho je to typ KeyValuePair.



Tady je jednoduchý ukázkový program



Třída entit:

Doména jmenného prostoru
{

//订单
    veřejné třídní řád
    {
        public int OrderID { get; set; }

        /// <summary>
        Datum objednávky
        /// </summary>
        public DateTime OrderDate { get; set; }

        /// <summary>
        Adresa objednávky
        /// </summary>
        public string OrderAdress { get; set; }

        /// <summary>
        Objednejte si telefon
        /// </summary>
        public string OrderTel { get; set; }
    }
}



//订单明细


Doména jmenného prostoru
{
    veřejné třídy OrderDetail
    {
        public int DetailID { get; set; }

        public int ProductID { get; set; }

        /// <summary>
        Množství
        /// </summary>
        veřejně desetinné množství { get; set; }

        /// <summary>
        Jednotková cena
        /// </summary>
        veřejně desítková cena { get; set; }
    }
}



//存放数据

pomocí System;
pomocí System.Collections.Generic;
pomocí System.Linq;
pomocí System.Text;
pomocí domény;

Služba jmenného prostoru
{
    veřejná statická třída OrderStock
    {
        soukromý statický IList<Order> m_orderList = nový List<Order>(); Definujte obecné pole pro List

        <Order> public static IList OrderList// definuje obecnou vlastnost seznamu
        {
            Dostaň
            {
                return m_orderList;
            }
            Sadu
            {
                m_orderList = hodnota;
            }
        }

        soukromý statický IDictionary<Order, IList<OrderDetail>> m_orders = nový Dictionary<Order, <OrderDetail>IList>();

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

        public static IDictionary<Order, IList<OrderDetail>> Orders/ definuje obecnou vlastnost slovníku
        {
            Dostaň
            {
                návrat m_orders;
            }
            Sadu
            {
                m_orders = hodnota;
            }
        }
    }
}



Rozhraní služeb

pomocí System;
pomocí domény;
Služba jmenného prostoru
{
    veřejné rozhraní IOrderService
    {

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

       Dotazovat všechny
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        objekt Uložit(Domain.Order entita);

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

  Dotaz podle ID
        Order Get (objekt id);

//获取下一个ID
        objekt GetNextID();
    }



Služba jmenného prostoru
{
    veřejné rozhraní IOrderDetailService
    {
        void Delete(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entity);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(object id);
        objekt GetNextDetailID(objekt mainID);
        objekt GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll();
        object Save(Domain.Order entity, System.Collections.Generic.IList<Domain.OrderDetail> detail);
        void Update(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entity);
    }
}



Realizace služby

pomocí System;
pomocí System.Collections.Generic;
pomocí System.Linq;
pomocí System.Text;
pomocí domény;

Služba jmenného prostoru
{
    public class OrderService : IOrderService
    {
        public IList<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            seznam návratů;
        }

        veřejný objekt GetNextID()
        {
            int id = 1;
            if (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            return id;
        }

        veřejný objekt Uložit(Order entity)
        {
            OrderStock.OrderList.Add(entity);

            Vrátit entitu. OrderID;
        }

        public void Aktualizace (Order entity)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entita. OrderID);

            pokud (seznam. Count<Order>() > 0)
            {
                Pořadí = seznam. First();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = entita;
            }
        }

        public order Get(object id)
        {
            Řádová entita = null;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            pokud (seznam. Count<Order>() > 0)
            {
                Pořadí = seznam. First();
                entita = ObjednávkaZásoba.ObjednávkaSeznam[ObjednávkaZásoba.Objednávka.IndexIndexOf(objednávky)];
            }
            return entity;
        }

        public void Delete (Order entity)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entita. OrderID);
            pokud (seznam. Count<Order>() > 0)
            {
                Pořadí = seznam. First();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





pomocí System;
pomocí System.Collections.Generic;
pomocí System.Linq;
pomocí System.Text;
pomocí domény;

Služba jmenného prostoru
{
    public class OrderDetailService : IOrderDetailService
    {
        public IDictionary<Order, IList<OrderDetail>> LoadAll()
        {
            var dic = ObjednávkaZásoby.Objednávky;

            return dic;
        }

        veřejný objekt GetNextID()
        {
            int id = 1;
            if (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);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                var item = dic.First();
                var list = položka. Value.Where(w => w.DetailID == (int)mainID);
                pokud (seznam. Count<OrderDetail>() > 0)
                {
                    id = seznam. First(). DetailID + 1;
                }
            }
            return id;
        }

        veřejný objekt Uložit (Order entity,<OrderDetail> IList detail)
        {
            objekt result = null;
            pokud (! OrderStock.Orders.ContainsKey(entity))
            {
                OrderStock.Orders.Add(entity, detail);
                výsledek = entita. OrderID;
            }
            Výsledek vrátit;
        }

        public void Update(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            if (OrderStock.Orders.ContainsKey(entity. Key))
            {
                ObjednávkaZásoby. Objednávky[entita. Key] = entita. Hodnota;
            }
        }

        public KeyValuePair<Order, IList<OrderDetail>> Get(object id)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> entita = nový KeyValuePair<Order, IList<OrderDetail>>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                entity = dic.First();
            }
            
            return entity;
        }

        public void Delete(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            if (OrderStock.Orders.ContainsKey(entity. Key))
            {
                OrderStock.Orders.Remove(entity. Key);
            }
        }
    }
}



Test

pomocí System;
pomocí System.Collections.Generic;
pomocí System.Linq;
pomocí System.Text;
pomocí NUnit.Framework;
pomocí Service;
pomocí domény;

Jmenný prostor ServiceTest
{
    [TestFixture]
    veřejná třída OrderServiceTest
    {
        soukromý IOrderService m_service;

        [SetUp]
        public void Init()
        {
            m_service = nový OrderService();
        }

        [Test]
        public void LoadAllTest()
        {
           var list= m_service. loadAll();
           foreach (var položka v seznamu)
           {
               Console.WriteLine(položka. OrderID);
               Console.WriteLine(položka. OrderAdresa);
               Console.WriteLine(položka. Datum objednávky);
               Console.WriteLine(položka. OrderTel);
           }
           Assert.IsNotNull(list);
        }

        [Test]
        public void Save()
        {
            Order entity = new Order()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumči",
                OrderTel = "123123"
            };
            objekt = m_service. Save(entity);
           
            Assert.IsNotNull(obj);
        }

        [Test]
        public void Update()
        {
            Řádová entita = m_service. Get(1);
            entitu. OrderAdress = "Korla";
            m_service. Update(entity);
        }

        [Test]
        public void Delete()
        {
            Řádová entita = m_service. Get(1);
            entitu. OrderAdress = "Korla";
            m_service. Delete(entity);
        }
    }
}



pomocí System;
pomocí System.Collections.Generic;
pomocí System.Linq;
pomocí System.Text;
pomocí NUnit.Framework;
pomocí Service;
pomocí domény;

Jmenný prostor ServiceTest
{
    [TestFixture]
    veřejná třída OrderServiceDetailTest
    {
        soukromý IOrderDetailService m_service;

        [SetUp]
        public void Init()
        {
            m_service = nový OrderDetailService();
        }

        [Test]
        public void LoadAllTest()
        {
           var list= m_service. loadAll();
           foreach (var položka v seznamu)
           {
               Console.WriteLine("-------------- Order ----------");
               Console.WriteLine(položka. Key.OrderID);
               Console.WriteLine(položka. Key.OrderAdresa);
               Console.WriteLine(položka. Key.OrderDate);
               Console.WriteLine(položka. Key.OrderTel);
               Console.WriteLine("-------------- Order Detail ----------");
               foreach (var li in item. Hodnota)
               {
                   Console.WriteLine(li.DetailID);
                   Console.WriteLine(li.Price);
                   Console.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(list);
        }

        [Test]
        public void Save()
        {
            int id = (int)m_service. GetNextID();
            Order entity = new Order()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumči",
                OrderTel = "123123"
            };
            <OrderDetail> IList list = nový List<OrderDetail>();
            pro (int i = 0; Jsem < 3; i++)
            {
                seznam. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Cena=10+i,
                    Quantity=i+100,
                    ProductID = 1000 + i
                });
            }
            objekt = m_service. Uložit(entita, seznam);
           
            Assert.IsNotNull(obj);
        }

        [Test]
        public void Update()
        {
            entita var = m_service. Get(1);

            entitu. Value[0] = nový OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Cena = 13,34 milionu,
                Množství = 200,1M
            };
            m_service. Update(entity);
        }

        [Test]
        public void Delete()
        {
            entita var = m_service. Get(1);
            m_service. Delete(entity);
        }
    }
}



Poznámka: Při testování je potřeba se odvolávat na nástroj nunit.framework




Předchozí:Sdílím dva nástroje pro CC útoky, dobré pro zátěžové testování
Další:Bi Fujian vydal omluvný dopis na Weibo: Cítím se velmi provinile a smutně
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com