Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 22445|Odpoveď: 0

[Zdroj] Použitie generických tried kolekcií (Ilist, IDictionary) v C#

[Kopírovať odkaz]
Zverejnené 10. 4. 2015 17:22:50 | | |

IDictionary je základné rozhranie pre generickú kolekciu párov kľúč/hodnota, z ktorých každý je pár kľúč-hodnota v objekte keyValuePair.

Každý pár musí mať jedinečný kľúč. Implementácia sa líši v tom, či povoliť kľúč ako prázdnu referenciu (v Visual Basicu nič neexistuje). Táto hodnota môže byť prázdna referencia (v Visual Basicu nič) a nemusí byť jedinečná. Rozhranie IDictionary umožňuje vymenovanie kľúčov a hodnôt, ktoré obsahuje, ale to neznamená žiadne konkrétne poradie triedenia.

Príkaz foreach v jazyku C# (For Each vo Visual Basic a pre každý v C++) vyžaduje typ každého prvku v kolekcii. Keďže každý prvok IDictionary je pár kľúč/hodnota, typ prvku nie je ani typom kľúča, ani typom hodnoty. Namiesto toho je to typ KeyValuePair.



Tu je jednoduchý príklad programu



Trieda entít:

Doména menného priestoru
{

//订单
    Verejné triedne Rád
    {
        public int OrderID { get; set; }

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

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

        /// <summary>
        Objednať telefón
        /// </summary>
        public string OrderTel { get; set; }
    }
}



//订单明细


Doména menného priestoru
{
    verejná trieda OrderDetail
    {
        public int DetailID { get; set; }

        public int ProductID { get; set; }

        /// <summary>
        Množstvo
        /// </summary>
        verejné desatinné množstvo { get; set; }

        /// <summary>
        Jednotková cena
        /// </summary>
        verejná desatinná cena { get; set; }
    }
}



//存放数据

pomocou systému;
používajúc System.Collections.Generic;
pomocou System.Linq;
pomocou System.Text;
pomocou domény;

Služba menného priestoru
{
    verejná statická trieda OrderStock
    {
        súkromný statický IList<Order> m_orderList = nový List<Order>(); Definujte generické pole pre List

        public static<Order> IList OrderList// definuje generickú vlastnosť Listu
        {
            Získaj
            {
                return m_orderList;
            }
            Set
            {
                m_orderList = hodnota;
            }
        }

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

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

        public static IDictionary<Order, IList<OrderDetail>> Orders/ definuje generickú vlastnosť slovníka
        {
            Získaj
            {
                return m_orders;
            }
            Set
            {
                m_orders = hodnota;
            }
        }
    }
}



Rozhrania služieb

pomocou systému;
pomocou domény;
Služba menného priestoru
{
    verejné rozhranie IOrderService
    {

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

       Vyhľadať všetkých
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        objekt Save(Domain.Order entita);

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

  Dotaz podľa ID
        Order Get (objekt id);

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



Služba menného priestoru
{
    verejné rozhranie 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);
    }
}



Realizácia služby

pomocou systému;
používajúc System.Collections.Generic;
pomocou System.Linq;
pomocou System.Text;
pomocou domény;

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

            zoznam návratov;
        }

        verejný objekt GetNextID()
        {
            int id = 1;
            ak (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            vrátiť ID;
        }

        public object Save(Order entity)
        {
            OrderStock.OrderList.Add(entity);

            vrátiť entitu. OrderID;
        }

        public void Aktualizácia (Príkazová entita)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entita. OrderID);

            ak (zoznam. Count<Order>() > 0)
            {
                Poradie = zoznam. First();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = entita;
            }
        }

        public Order Get(object id)
        {
            Entita rádu = null;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            ak (zoznam. Count<Order>() > 0)
            {
                Poradie = zoznam. First();
                entita = ObjednávkaZásoba.ObjednávkaZoznam[ObjednávkaZásoba.ObjednávkaZoznam.IndexIndexOf(objednávky)];
            }
            vrátiť entitu;
        }

        public void Delete (Order entity)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entita. OrderID);
            ak (zoznam. Count<Order>() > 0)
            {
                Poradie = zoznam. First();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





pomocou systému;
používajúc System.Collections.Generic;
pomocou System.Linq;
pomocou System.Text;
pomocou domény;

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

            return dic;
        }

        verejný objekt GetNextID()
        {
            int id = 1;
            ak (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            vrátiť ID;
        }

        public object GetNextDetailID (object mainID)
        {
            int id = 1;
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)mainID);
            ak (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                var položka = dic.First();
                var list = položka. Value.Where(w => w.DetailID == (int)mainID);
                ak (zoznam. Count<OrderDetail>() > 0)
                {
                    id = zoznam. First(). DetailID + 1;
                }
            }
            vrátiť ID;
        }

        public object Save (Order entity,<OrderDetail> IList detail)
        {
            výsledok objektu = null;
            ak (! OrderStock.Orders.ContainsKey(entity))
            {
                OrderStock.Orders.Add(entity, detail);
                výsledok = entita. OrderID;
            }
            vrátiť výsledok;
        }

        public void Update(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            ak (OrderStock.Orders.ContainsKey(entity. Key))
            {
                OrderStock.Orders[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);
            ak (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                entity = dic.First();
            }
            
            vrátiť entitu;
        }

        public void Delete(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            ak (OrderStock.Orders.ContainsKey(entity. Key))
            {
                ObjednaťSklad.Príkazy.Odstrániť(entita. Key);
            }
        }
    }
}



Test

pomocou systému;
používajúc System.Collections.Generic;
pomocou System.Linq;
pomocou System.Text;
pomocou NUnit.Framework;
pomocou Service;
pomocou domény;

Menný priestor ServiceTest
{
    [TestFixture]
    verejná trieda OrderServiceTest
    {
        súkromný IOrderService m_service;

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

        [Test]
        public void LoadAllTest()
        {
           var list= m_service. LoadAll();
           foreach (var položka v zozname)
           {
               Console.WriteLine(položka. OrderID);
               Console.WriteLine(položka. OrderAdress);
               Console.WriteLine(položka. OrderDate);
               Console.WriteLine(položka. OrderTel);
           }
           Assert.IsNotNull(list);
        }

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

        [Test]
        public void Update()
        {
            Entita rádu = m_service. Get(1);
            entita. OrderAdress = "Korla";
            m_service. Aktualizácia(enta);
        }

        [Test]
        public void Delete()
        {
            Entita rádu = m_service. Get(1);
            entita. OrderAdress = "Korla";
            m_service. Delete(entity);
        }
    }
}



pomocou systému;
používajúc System.Collections.Generic;
pomocou System.Linq;
pomocou System.Text;
pomocou NUnit.Framework;
pomocou Service;
pomocou domény;

Menný priestor ServiceTest
{
    [TestFixture]
    verejná trieda OrderServiceDetailTest
    {
        súkromný IOrderDetailService m_service;

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

        [Test]
        public void LoadAllTest()
        {
           var list= m_service. LoadAll();
           foreach (var položka v zozname)
           {
               Console.WriteLine("-------------- Order ----------");
               Console.WriteLine(položka. Key.OrderID);
               Console.WriteLine(položka. Key.OrderAdress);
               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 = nový Order()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumči",
                OrderTel = "123123"
            };
            <OrderDetail> IList list = nový List<OrderDetail>();
            pre (int i = 0; Mám < 3; i++)
            {
                zoznam. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Cena=10+i,
                    Quantity=i+100,
                    ProductID = 1000 + i
                });
            }
            objekt objektu = m_service. Uložiť (entita, zoznam);
           
            Assert.IsNotNull(obj);
        }

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

            entita. Value[0] = nový OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Cena = 13,34 milióna,
                Množstvo = 200,1M
            };
            m_service. Aktualizácia(enta);
        }

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



Poznámka: Pri testovaní je potrebné odkazovať na nástroj nunit.framework




Predchádzajúci:Zdieľam dva nástroje na CC útoky, dobré na záťažové testovanie
Budúci:Bi Fujian vydal na Weibo ospravedlňujúci list: Cítim sa veľmi previnilo a smutno
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com