See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 22445|Vastuse: 0

[Allikas] Üldiste koguklasside (Ilist, IDictionary) kasutamine C#-s

[Kopeeri link]
Postitatud 10.04.2015 17:22:50 | | |

IDictionary on baasliides üldisele võtme/väärtuse paaride kogumile, millest igaüks on võtme-väärtuse paar keyValuePair objektis.

Igal paaril peab olema ainulaadne võti. Rakendus erineb selles, kas lubada võtmel olla tühi viide (Visual Basicus pole midagi). See väärtus võib olla tühi viide (Visual Basicus pole midagi) ja ei pea olema unikaalne. IDictionary liides võimaldab loendada seal sisalduvaid võtmeid ja väärtusi, kuid see ei tähenda kindlat sorteerimisjärjekorda.

C# keeles foreach lause (For Each in Visual Basicus ja Each for each in C++) nõuab iga elemendi tüüpi kogus. Kuna iga IDictionary element on võtme/väärtuse paar, ei ole elemenditüüp ei võtme tüüp ega väärtuse tüüp. Selle asemel on see KeyValuePair tüüp.



Siin on lihtne näidisprogramm



Üksuse klass:

Nimeruumi domeen
{

//订单
    avaliku klassi kord
    {
        public int OrderID { get; seatud; }

        /// <summary>
        Tellimuse kuupäev
        /// </summary>
        public DateTime OrderDate { get; seatud; }

        /// <summary>
        Tellimuse aadress
        /// </summary>
        public string OrderAdress { get; seatud; }

        /// <summary>
        Telli telefon
        /// </summary>
        public string OrderTel { get; seatud; }
    }
}



//订单明细


Nimeruumi domeen
{
    avaliku klassi OrderDetail
    {
        public int DetailID { get; seatud; }

        public int ProductID { get; seatud; }

        /// <summary>
        Kogus
        /// </summary>
        avalik kümnendkomaa Kogus { get; seatud; }

        /// <summary>
        Ühiku hind
        /// </summary>
        avalik kümnendkoht Hind { saa; seatud; }
    }
}



//存放数据

kasutades süsteemi;
kasutades System.Collections.Generic;
kasutades System.Linq'i;
kasutades System.Texti;
kasutades Domaini;

nimeruumi teenus
{
    avalik staatiline klass OrderStock
    {
        privaatne staatiline<Order> IList m_orderList = uus List<Order>(); Määratle üldine väli loendi jaoks

        avalik staatiline IList<Order> OrderList// määratleb nimekirja üldise omaduse
        {
            Mine
            {
                Tagasi m_orderList;
            }
            Komplekt
            {
                m_orderList = väärtus;
            }
        }

        privaatne staatiline IDictionary<Order, <OrderDetail>IList> m_orders = uus Sõnastik<Kord, <OrderDetail>IList>();

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

        avalik staatiline IDictionary<Order, <OrderDetail>IList> Orders/ määratleb sõnastiku üldise omaduse
        {
            Mine
            {
                Tagasi m_orders;
            }
            Komplekt
            {
                m_orders = väärtus;
            }
        }
    }
}



Teenuseliidesed

kasutades süsteemi;
kasutades Domaini;
nimeruumi teenus
{
    avaliku liidese IOrderService
    {

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

       Küsi kõiki
        System.Collections.Generic.IList<Domain.Order> LoadAll();

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

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

  Päring ID järgi
        Order Get(objekti ID);

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



nimeruumi teenus
{
    avalik liides 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);
        object GetNextDetailID(object 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);
    }
}



Teenuse realiseerimine

kasutades süsteemi;
kasutades System.Collections.Generic;
kasutades System.Linq'i;
kasutades System.Texti;
kasutades Domaini;

nimeruumi teenus
{
    avalik klass Tellimusteenistus : IOrderService
    {
        avalik IList<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            tagastusnimekiri;
        }

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

        avalik objekt Salvesta (Tellimusüksus)
        {
            OrderStock.OrderList.Add(entity);

            Tagasi olend. OrderID;
        }

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

            if (list. Loend<Order>() > 0)
            {
                Järjekord = nimekiri. Esiteks();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = üksus;
            }
        }

        Avaliku korra saamine (objekti ID)
        {
            Tellimuse üksus = null;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            if (list. Loend<Order>() > 0)
            {
                Järjekord = nimekiri. Esiteks();
                entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)];
            }
            tagasipöördumise entiteedile;
        }

        public void Delete (Order entity)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);
            if (list. Loend<Order>() > 0)
            {
                Järjekord = nimekiri. Esiteks();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





kasutades süsteemi;
kasutades System.Collections.Generic;
kasutades System.Linq'i;
kasutades System.Texti;
kasutades Domaini;

nimeruumi teenus
{
    avalik klass OrderDetailService : IOrderDetailService
    {
        avalik IDictionary<Order, <OrderDetail>IList> LoadAll()
        {
            var dic = OrderStock.Orders;

            Return Dic;
        }

        public object GetNextID()
        {
            int id = 1;
            if (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            tagastuse 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, <OrderDetail>IList>>() > 0)
            {
                var item = dic.First();
                var list = üksus. Value.Where(w => w.DetailID == (int)mainID);
                if (list. Loend<OrderDetail>() > 0)
                {
                    id = nimekiri. Esiteks(). DetailID + 1;
                }
            }
            tagastuse ID;
        }

        avalik objekt Salvesta (Order entity, IList<OrderDetail> detail)
        {
            objekti tulemus = null;
            kui (! OrderStock.Orders.ContainsKey(entity))
            {
                OrderStock.Orders.Add(üksus, detail);
                tulemus = üksus. OrderID;
            }
            tagastustulemus;
        }

        public void Update(KeyValuePair<Order, <OrderDetail>IList> entity)
        {
            if (OrderStock.Orders.ContainsKey(entity. Võti))
            {
                OrderStock.Orders[entity. Võti] = olend. Väärtus;
            }
        }

        public KeyValuePair<Order, <OrderDetail>IList> Get(object id)
        {
           
            KeyValuePair<Order, <OrderDetail>IList> entity = uus KeyValuePair<Order, <OrderDetail>IList>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            if (dic.Count<KeyValuePair<Order, <OrderDetail>IList>>() > 0)
            {
                entity = dic.First();
            }
            
            tagasipöördumise entiteedile;
        }

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



Katse

kasutades süsteemi;
kasutades System.Collections.Generic;
kasutades System.Linq'i;
kasutades System.Texti;
kasutades NUnit.Frameworki;
Teenuse kasutamine;
kasutades Domaini;

Nimeruumi ServiceTest
{
    [TestFixture]
    avaliku klassi OrderServiceTest
    {
        privaatne IOrderService m_service;

        [Seadistamine]
        public void Init()
        {
            m_service = uus OrderService();
        }

        [Test]
        public void LoadAllTest()
        {
           var list= m_service. LoadAll();
           foreach (VAR üksus nimekirjas)
           {
               Konsool.WriteLine(üksus. OrderID);
               Konsool.WriteLine(üksus. OrderAdress);
               Konsool.WriteLine(üksus. OrderDate);
               Konsool.WriteLine(üksus. OrderTel);
           }
           Assert.IsNotNull(list);
        }

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

        [Test]
        public void Uuendus()
        {
            Tellimusüksus = m_service. Get(1);
            entiteet. OrderAdress = "Korla";
            m_service. Uuendus(entity);
        }

        [Test]
        public void Delete()
        {
            Tellimusüksus = m_service. Get(1);
            entiteet. OrderAdress = "Korla";
            m_service. Delete(entity);
        }
    }
}



kasutades süsteemi;
kasutades System.Collections.Generic;
kasutades System.Linq'i;
kasutades System.Texti;
kasutades NUnit.Frameworki;
Teenuse kasutamine;
kasutades Domaini;

Nimeruumi ServiceTest
{
    [TestFixture]
    avaliku klassi OrderServiceDetailTest
    {
        privaatne IOrderDetailService m_service;

        [Seadistamine]
        public void Init()
        {
            m_service = uus OrderDetailService();
        }

        [Test]
        public void LoadAllTest()
        {
           var list= m_service. LoadAll();
           foreach (VAR üksus nimekirjas)
           {
               Console.WriteLine("-------------- Order ----------");
               Konsool.WriteLine(üksus. Key.OrderID);
               Konsool.WriteLine(üksus. Key.OrderAdress);
               Konsool.WriteLine(üksus. Key.OrderDate);
               Konsool.WriteLine(üksus. Key.OrderTel);
               Console.WriteLine("-------------- tellimuse detailid ----------");
               foreach (var li in item. Väärtus)
               {
                   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 = uus Order()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumqi",
                OrderTel = "123123"
            };
            IList<OrderDetail> list = uus List<OrderDetail>();
            for (int i = 0; I < 3; i++)
            {
                nimekirjas. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Hind=10+i,
                    Kogus=i+100,
                    ProductID = 1000 + i
                });
            }
            objekt obj = m_service. Save(entity, list);
           
            Assert.IsNotNull(obj);
        }

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

            entiteet. Value[0] = uus OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Hind = 13,34M,
                Kogus = 200,1M
            };
            m_service. Uuendus(entity);
        }

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



Märkus: testimisel pead viitama nunit.framework tööriistale




Eelmine:Jaga kahte CC rünnakutööriista, head stressitestimiseks
Järgmine:Bi Fujian avaldas Weibos vabanduskirja: Tunnen end väga süüdi ja kurvana
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com