Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 22445|Răspunde: 0

[Sursă] Utilizarea claselor generice de colecție (Ilist, IDictionary) în C#

[Copiază linkul]
Postat pe 10.04.2015 17:22:50 | | |

IDictionary este interfața de bază pentru o colecție generică de perechi cheie/valoare, fiecare dintre ele fiind o pereche cheie-valoare în obiectul keyValuePair.

Fiecare pereche trebuie să aibă o cheie unică. Implementarea diferă în ceea ce privește dacă trebuie sau nu permis ca cheia să fie o referință goală (Nimic în Visual Basic). Această valoare poate fi o referință goală (Nimic în Visual Basic) și nu trebuie să fie unică. Interfața IDictionary permite enumerarea cheilor și valorilor pe care le conține, dar aceasta nu implică o ordine de sortare specifică.

Instrucțiunea foreach din limbajul C# (For Each în Visual Basic și For Each în C++) necesită tipul fiecărui element din colecție. Deoarece fiecare element al IDictionary este o pereche cheie/valoare, tipul elementului nu este nici un tip de cheie, nici un tip de valoare. În schimb, este un tip KeyValuePair.



Iată un exemplu simplu de program



Clasa entității:

Spațiu de nume Domeniu
{

//订单
    Ordinul clasei publice
    {
        public int OrderID { get; set; }

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

        /// <summary>
        Adresa comenzii
        /// </summary>
        șirul public OrderAdress { get; set; }

        /// <summary>
        Comandă telefonul
        /// </summary>
        șirul public OrderTel { get; set; }
    }
}



//订单明细


Spațiu de nume Domeniu
{
    Ordine de clasă publică
    {
        public int DetailID { get; set; }

        public int ProductID { get; set; }

        /// <summary>
        Cantitate
        /// </summary>
        zecimalul public Cantitate { get; set; }

        /// <summary>
        Preț unitar
        /// </summary>
        zecimalul public Price { get; set; }
    }
}



//存放数据

folosind Sistem;
folosind System.Collections.Generic;
folosind System.Linq;
folosind System.Text;
folosind Domain;

Serviciul spațiului de denumire
{
    clasa statică publică OrderStock
    {
        IList static<Order> privat m_orderList = new List<Order>(); Definiți un câmp generic pentru o listă

        IList public<Order> static OrderList// definește o proprietate generică a unei Liste
        {
            Ia-ți
            {
                întoarcerea m_orderList;
            }
            Set
            {
                m_orderList = valoare;
            }
        }

        private static IDictionary<Order, IList<OrderDetail>> m_orders = nou Dictionary<Order, IList<OrderDetail>>();

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

        public static IDictionary<Order, IList<OrderDetail>> Orders/ definește o proprietate generică a unui dicționar
        {
            Ia-ți
            {
                întoarcerea m_orders;
            }
            Set
            {
                m_orders = valoare;
            }
        }
    }
}



Interfețe de serviciu

folosind Sistem;
folosind Domain;
Serviciul spațiului de denumire
{
    interfață publică IOrderService
    {

//删除
        void Șterge (entitate Domain.Order);

       Interoghează toate
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        obiectul Save(entitatea Domain.Order);

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

  Interogare după ID
        Comandă Get (ID obiect);

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



Serviciul spațiului de denumire
{
    interfață publică IOrderDetailService
    {
        void Delete(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entitate);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(object id);
        obiectul GetNextDetailID(obiectul mainID);
        obiect GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll();
        object Save(entitatea Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail> detalii);
        actualizare void (System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entitate);
    }
}



Realizarea serviciului

folosind Sistem;
folosind System.Collections.Generic;
folosind System.Linq;
folosind System.Text;
folosind Domain;

Serviciul spațiului de denumire
{
    Serviciu de Ordin de Clasă Publică : Serviciu Superior
    {
        IList public<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            lista de returnări;
        }

        obiect public GetNextID()
        {
            int id = 1;
            dacă (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            returnează ID;
        }

        obiect public Salvare (entitate de ordine)
        {
            OrderStock.OrderList.Add(entitate);

            Returnează entitatea. OrderID;
        }

        Actualizare pentru anul public (entitate de ordine)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);

            dacă (listă. <Order>Numărătoare() > 0)
            {
                Ordinea ordinii = listă. First();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = entitate;
            }
        }

        Public Order Get (obiect id)
        {
            Entitatea de ordine = nulă;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            dacă (listă. <Order>Numărătoare() > 0)
            {
                Ordinea ordinii = listă. First();
                entitate = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)];
            }
            returnează entitatea;
        }

        public void Șterge (entitate de ordine)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);
            dacă (listă. <Order>Numărătoare() > 0)
            {
                Ordinea ordinii = listă. First();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





folosind Sistem;
folosind System.Collections.Generic;
folosind System.Linq;
folosind System.Text;
folosind Domain;

Serviciul spațiului de denumire
{
    clasă publică OrderDetailService: IOrderDetailService
    {
        public IDictionary<Order, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            returnează dic;
        }

        obiect public GetNextID()
        {
            int id = 1;
            dacă (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m = > m.Key.OrderID) + 1;
            }
            returnează ID;
        }

        obiect public GetNextDetailID(obiect 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();
                Listă VAR = Item. Value.Where(w => w.DetailID == (int)mainID);
                dacă (listă. Count<OrderDetail>() > 0)
                {
                    id = listă. First(). DetailID + 1;
                }
            }
            returnează ID;
        }

        obiect public Salvare (entitate de ordine,<OrderDetail> detaliu IList)
        {
            Rezultat al obiectului = nul;
            dacă (! OrderStock.Orders.ContainsKey(entity))
            {
                OrderStock.Orders.Add(entitate, detaliu);
                Rezultat = entitate. OrderID;
            }
            rezultatul returnării;
        }

        public void Update (KeyValuePair<Order, <OrderDetail>IList> entitate)
        {
            dacă (OrderStock.Orders.ContainsKey(entity. Cheie))
            {
                OrderStock.Orders[entity. Cheie] = entitate. Valoare;
            }
        }

        public KeyValuePair<Order, IList<OrderDetail>> Get(object id)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> entity = new KeyValuePair<Order, IList<OrderDetail>>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                entitate = dic.First();
            }
            
            returnează entitatea;
        }

        public void Șterge (KeyValuePair<Order, <OrderDetail>IList> entitate)
        {
            dacă (OrderStock.Orders.ContainsKey(entity. Cheie))
            {
                OrderStock.Orders.Remove(entity. Tonalitate);
            }
        }
    }
}



Testa

folosind Sistem;
folosind System.Collections.Generic;
folosind System.Linq;
folosind System.Text;
folosind NUnit.Framework;
folosirea serviciului;
folosind Domain;

Spațiu de nume ServiceTest
{
    [TestFixture]
    clasă publică OrderServiceTest
    {
        Serviciul privat IOrderService m_service;

        [Pregătire]
        vid public Init()
        {
            m_service = noul OrderService();
        }

        [Test]
        public void LoadAllTest()
        {
           var list= m_service. LoadAll();
           Foreach (element var din listă)
           {
               Console.WriteLine(item. OrderID);
               Console.WriteLine(item. OrderAdress);
               Console.WriteLine(item. OrderDate);
               Console.WriteLine(item. OrderTel);
           }
           Assert.IsNotNull(listă);
        }

        [Test]
        public void Salvează()
        {
            Entitatea Ordinului = noua Ordine()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                AdresaOrdineAdresă = "Urumqi",
                OrderTel = "123123"
            };
            obiect obj = m_service. Salvare (entitate);
           
            Assert.IsNotNull(obj);
        }

        [Test]
        Actualizare pentru void public ()
        {
            Entitatea de ordine = m_service. Get(1);
            entitate. OrderAdress = "Korla";
            m_service. Actualizare (entitate);
        }

        [Test]
        public void Șterge()
        {
            Entitatea de ordine = m_service. Get(1);
            entitate. OrderAdress = "Korla";
            m_service. Șterge(entitate);
        }
    }
}



folosind Sistem;
folosind System.Collections.Generic;
folosind System.Linq;
folosind System.Text;
folosind NUnit.Framework;
folosirea serviciului;
folosind Domain;

Spațiu de nume ServiceTest
{
    [TestFixture]
    clasă publică OrderServiceDetailTest
    {
        private IOrderDetailService m_service;

        [Pregătire]
        vid public Init()
        {
            m_service = noul OrderDetailService();
        }

        [Test]
        public void LoadAllTest()
        {
           var list= m_service. LoadAll();
           Foreach (element var din listă)
           {
               Console.WriteLine("-------------- Order ----------");
               Console.WriteLine(item. Key.OrderID);
               Console.WriteLine(item. Cheie.AdresăComandă);
               Console.WriteLine(item. Key.OrderDate);
               Console.WriteLine(item. Key.OrderTel);
               Console.WriteLine("-------------- Detaliu de Comandă ----------");
               Foreach (var li în item. Valoare)
               {
                   Console.WriteLine(li.DetailID);
                   Console.WriteLine(li.Price);
                   Console.WriteLine(li.Cantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(listă);
        }

        [Test]
        public void Salvează()
        {
            int ID = (int)m_service. GetNextID();
            Entitatea Ordinului = noua Ordine()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                AdresaOrdineAdresă = "Urumqi",
                OrderTel = "123123"
            };
            <OrderDetail> Lista IList = Lista <OrderDetail>nouă();
            pentru (int i = 0; Am < 3; i++)
            {
                listă. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Preț=10+i,
                    Cantitate=i+100,
                    ProductID = 1000 + i
                });
            }
            obiect obj = m_service. Salvare (entitate, listă);
           
            Assert.IsNotNull(obj);
        }

        [Test]
        Actualizare pentru void public ()
        {
            Entitatea var = m_service. Get(1);

            entitate. Value[0] = new OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Preț = 13,34M,
                Cantitate = 200,1M
            };
            m_service. Actualizare (entitate);
        }

        [Test]
        public void Șterge()
        {
            Entitatea var = m_service. Get(1);
            m_service. Șterge(entitate);
        }
    }
}



Notă: Trebuie să consulți instrumentul nunit.framework la testare




Precedent:Împărtășește două unelte de atac CC, bune pentru testarea stresului
Următor:Bi Fujian a trimis o scrisoare de scuze pe Weibo: Mă simt foarte vinovat și trist
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com