Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 22445|Antwoord: 0

[Bron] Het gebruik van generieke verzamelingsklassen (Ilist, IDictionary) in C#

[Link kopiëren]
Geplaatst op 10-04-2015 17:22:50 | | |

IDictionary is de basisinterface voor een generieke verzameling sleutel/waardeparen, elk een sleutel-waardepaar in het keyValuePair-object.

Elk paar moet een unieke sleutel hebben. De implementatie verschilt in de vraag of de sleutel een lege referentie mag zijn (niets in Visual Basic). Deze waarde kan een lege referentie zijn (niets in Visual Basic) en hoeft niet uniek te zijn. De IDictionary-interface maakt een opsomming van de sleutels en waarden die het bevat mogelijk, maar dit impliceert geen specifieke sorteervolgorde.

De foreach-instructie in de C#-taal (For Each in Visual Basic en voor each in C++) vereist het type van elk element in de collectie. Aangezien elk element van IDictionary een sleutel/waarde-paar is, is het elementtype noch een type sleutel, noch een type waarde. In plaats daarvan is het een KeyValuePair-type.



Hier is een eenvoudig voorbeeldprogramma



Entiteitsklasse:

naamruimte Domein
{

//订单
    Orde van de openbare klasse
    {
        publieke int OrderID { get; set; }

        /// <summary>
        Besteldatum
        /// </summary>
        public DateTime OrderDate { get; set; }

        /// <summary>
        Besteladres
        /// </summary>
        publieke string OrderAdress { get; set; }

        /// <summary>
        Bestel telefoon
        /// </summary>
        publieke string OrderTel { get; set; }
    }
}



//订单明细


naamruimte Domein
{
    publieke klasse OrderDetail
    {
        public int DetailID { get; set; }

        public int ProductID { get; set; }

        /// <summary>
        Aantal
        /// </summary>
        publieke decimale Quantity { get; set; }

        /// <summary>
        Eenheidsprijs
        /// </summary>
        publieke decimale Price { get; set; }
    }
}



//存放数据

met behulp van System;
met behulp van System.Collections.Generic;
met behulp van System.Linq;
gebruik van System.Text;
met behulp van Domain;

naamruimtedienst
{
    publieke statische klasse OrderStock
    {
        privé statisch IList<Order> m_orderList = nieuwe Lijst<Order>(); Definieer een generiek veld voor een Lijst

        publieke statische IList<Order> OrderList// definieert een generieke eigenschap van een List
        {
            Toevoegen
            {
                Keer terug m_orderList;
            }
            Set
            {
                m_orderList = waarde;
            }
        }

        privé statisch IDictionary<Order, IList<OrderDetail>> m_orders = nieuw Dictionary<Order, IList<OrderDetail>>();

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

        publieke statische IDictionary<Order, IList<OrderDetail>> Orders/ definieert een generieke eigenschap van een woordenboek
        {
            Toevoegen
            {
                keer terug m_orders;
            }
            Set
            {
                m_orders = waarde;
            }
        }
    }
}



Service-interfaces

met behulp van System;
met behulp van Domain;
naamruimtedienst
{
    publieke interface IOrderService
    {

//删除
        void Delete(Domain.Order-entiteit);

       Zoek alles op
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        object Save(Domain.Order entiteit);

//更新
        void Update (Domain.Order-entiteit);

  Zoekopdracht op ID
        Order Get (object-id);

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



naamruimtedienst
{
    publieke interface IOrderDetailService
    {
        void Delete(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entiteit);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(object id);
        object GetNextDetailID (object mainID);
        object 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>> entiteit);
    }
}



Dienstrealisatie

met behulp van System;
met behulp van System.Collections.Generic;
met behulp van System.Linq;
gebruik van System.Text;
met behulp van Domain;

naamruimtedienst
{
    publieke klasse OrderService : IOrderService
    {
        publieke IList<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            retourlijst;
        }

        publiek object GetNextID()
        {
            int id = 1;
            if (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            Retour-ID;
        }

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

            Return-entiteit. OrderID;
        }

        public void Update (Order-entiteit)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entiteit. OrderID);

            als (lijst. Tellen<Order>() > 0)
            {
                Volgorde = lijst. Eerste();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = entiteit;
            }
        }

        openbare orde Get(object id)
        {
            Orde-entiteit = nul;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            als (lijst. Tellen<Order>() > 0)
            {
                Volgorde = lijst. Eerste();
                entiteit = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)];
            }
            retourentiteit;
        }

        publieke leegte Verwijderen (Order-entiteit)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entiteit. OrderID);
            als (lijst. Tellen<Order>() > 0)
            {
                Volgorde = lijst. Eerste();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





met behulp van System;
met behulp van System.Collections.Generic;
met behulp van System.Linq;
gebruik van System.Text;
met behulp van Domain;

naamruimtedienst
{
    publieke klasse OrderDetailService : IOrderDetailService
    {
        publieke IDictionary<Order, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            Geef DIC terug;
        }

        publiek object GetNextID()
        {
            int id = 1;
            if (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            Retour-ID;
        }

        publiek object GetNextDetailID (object mainID)
        {
            int id = 1;
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)mainID);
            als (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                var item = dic.First();
                Var-lijst = item. Value.Where(w => w.DetailID == (int)mainID);
                als (lijst. Count<OrderDetail>() > 0)
                {
                    id = lijst. Ten eerste(). DetailID + 1;
                }
            }
            Retour-ID;
        }

        publiek object Save(Order entity, IList<OrderDetail> detail)
        {
            objectresultaat = null;
            als (! OrderStock.Orders.BevatsKey(entiteit))
            {
                OrderStock.Orders.Add (entiteit, detail);
                resultaat = entiteit. OrderID;
            }
            retourresultaat;
        }

        public void Update(KeyValuePair<Order, IList<OrderDetail>> entiteit)
        {
            als (OrderStock.Orders.ContainsKey(entity. Key))
            {
                OrderStock.Orders[entiteit. Key] = entiteit. Waarde;
            }
        }

        publieke KeyValuePair<Order, IList<OrderDetail>> Get(object id)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> entiteit = nieuwe KeyValuePair<Order, IList<OrderDetail>>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            als (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                entiteit = dic.First();
            }
            
            retourentiteit;
        }

        public void Delete(KeyValuePair<Order, IList<OrderDetail>> entiteit)
        {
            als (OrderStock.Orders.ContainsKey(entity. Key))
            {
                OrderStock.Orders.Verwijderen(entiteit. Sleutel);
            }
        }
    }
}



Test

met behulp van System;
met behulp van System.Collections.Generic;
met behulp van System.Linq;
gebruik van System.Text;
gebruik van NUnit.Framework;
gebruik maken van Service;
met behulp van Domain;

naamruimte ServiceTest
{
    [TestFixture]
    publieke klasse OrderServiceTest
    {
        particuliere IOrderService m_service;

        [Opzet]
        publieke leegte Init()
        {
            m_service = nieuwe OrderService();
        }

        [Test]
        publieke void LoadAllTest()
        {
           Var list= m_service. LoadAll();
           Foreach (VAR-item in de lijst)
           {
               Console.WriteLine(item. OrderID);
               Console.WriteLine(item. OrderAdress);
               Console.WriteLine(item. OrderDate);
               Console.WriteLine(item. OrderTel);
           }
           Assert.IsNotNull(list);
        }

        [Test]
        openbare leegte Save()
        {
            Order-entiteit = nieuwe Order()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumqi",
                OrderTel = "123123"
            };
            object obj = m_service. Save(entiteit);
           
            Assert.IsNotNull(obj);
        }

        [Test]
        public void Update()
        {
            Orderentiteit = m_service. Get(1);
            entiteit. OrderAdress = "Korla";
            m_service. Update(entiteit);
        }

        [Test]
        public void Verwijderen()
        {
            Orderentiteit = m_service. Get(1);
            entiteit. OrderAdress = "Korla";
            m_service. Verwijderen(entiteit);
        }
    }
}



met behulp van System;
met behulp van System.Collections.Generic;
met behulp van System.Linq;
gebruik van System.Text;
gebruik van NUnit.Framework;
gebruik maken van Service;
met behulp van Domain;

naamruimte ServiceTest
{
    [TestFixture]
    publieke klasse OrderServiceDetailTest
    {
        privé IOrderDetailService m_service;

        [Opzet]
        publieke leegte Init()
        {
            m_service = nieuwe OrderDetailService();
        }

        [Test]
        publieke void LoadAllTest()
        {
           Var list= m_service. LoadAll();
           Foreach (VAR-item in de lijst)
           {
               Console.WriteLine("-------------- Order ----------");
               Console.WriteLine(item. Sleutel.OrderID);
               Console.WriteLine(item. Key.OrderAddress);
               Console.WriteLine(item. Sleutel.OrderDate);
               Console.WriteLine(item. Key.OrderTel);
               Console.WriteLine("-------------- Order Detail ----------");
               foreach (var li in item. Waarde)
               {
                   Console.WriteLine(li.DetailID);
                   Console.WriteLine (li.Price);
                   Console.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(list);
        }

        [Test]
        openbare leegte Save()
        {
            int id = (int)m_service. GetNextID();
            Order-entiteit = nieuwe Order()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumqi",
                OrderTel = "123123"
            };
            IList<OrderDetail> list = nieuwe List<OrderDetail>();
            voor (int i = 0; Ik < 3; i++)
            {
                lijst. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Price=10+i,
                    Hoeveelheid=i+100,
                    ProductID = 1000 + i
                });
            }
            object obj = m_service. Save(entiteit, lijst);
           
            Assert.IsNotNull(obj);
        }

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

            entiteit. Value[0] = nieuwe OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Prijs = 13,34 miljoen,
                Hoeveelheid = 200,1M
            };
            m_service. Update(entiteit);
        }

        [Test]
        public void Verwijderen()
        {
            var-entiteit = m_service. Get(1);
            m_service. Verwijderen(entiteit);
        }
    }
}



Opmerking: Je moet bij het testen de nunit.framework-tool raadplegen




Vorig:Deel twee CC-aanvalstools, goed voor stresstesten
Volgend:Bi Fujian heeft een verontschuldigingsbrief op Weibo geplaatst: Ik voel me erg schuldig en verdrietig
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com