Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 22445|Risposta: 0

[Fonte] L'uso di classi di raccolta generiche (Ilist, IDictionary) in C#

[Copiato link]
Pubblicato su 10/04/2015 17:22:50 | | |

IDictionary è l'interfaccia base per una collezione generica di coppie chiave/valore, ciascuna delle quali è una coppia chiave-valore nell'oggetto keyValuePair.

Ogni coppia deve avere una chiave unica. L'implementazione differisce nel permettere o meno che la chiave sia un riferimento vuoto (Nothing in Visual Basic). Questo valore può essere un riferimento vuoto (Niente in Visual Basic) e non deve essere per forza unico. L'interfaccia IDictionary consente di enumerare le chiavi e i valori che contiene, ma ciò non implica un ordine di ordinamento specifico.

L'istruzione foreach nel linguaggio C# (For Each in Visual Basic e per each in C++) richiede il tipo di ciascun elemento nella collezione. Poiché ogni elemento di IDictionary è una coppia chiave/valore, il tipo di elemento non è né un tipo di chiave né un tipo di valore. Invece, è un tipo KeyValuePair.



Ecco un semplice esempio di programma



Classe di entità:

Spazio dei nomi Dominio
{

//订单
    Ordine di classe pubblica
    {
        public int OrderID { get; set; }

        /// <summary>
        Data dell'ordine
        /// </summary>
        Public DateTime OrderDate { get; set; }

        /// <summary>
        Indirizzo dell'ordine
        /// </summary>
        stringa pubblica OrderAdress { get; set; }

        /// <summary>
        Ordina telefono
        /// </summary>
        stringa pubblica OrderTel { get; set; }
    }
}



//订单明细


Spazio dei nomi Dominio
{
    classe pubblica OrdineDettaglio
    {
        public int DetailID { get; set; }

        public int ProductID { get; set; }

        /// <summary>
        Quantità
        /// </summary>
        decimale pubblico Quantità { get; set; }

        /// <summary>
        Prezzo unitario
        /// </summary>
        decimale pubblico Price { get; set; }
    }
}



//存放数据

usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domain;

Servizio namespace
{
    classe statica pubblica OrderStock
    {
        IList statico<Order> privato m_orderList = nuova Lista<Order>(); Definisci un campo generico per una Lista

        IList statico<Order> pubblico OrderList// definisce una proprietà generica di una Lista
        {
            Ottieni
            {
                ritorno m_orderList;
            }
            Set
            {
                m_orderList = valore;
            }
        }

        privato statico IDictionary<Order, IList<OrderDetail>> m_orders = nuovo Dizionario<Ordine, IList<OrderDetail>>();

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

        Identificazione statica pubblica<Order, IList<OrderDetail>> Orders/ definisce una proprietà generica di un dizionario
        {
            Ottieni
            {
                ritorno m_orders;
            }
            Set
            {
                m_orders = valore;
            }
        }
    }
}



Interfacce di servizio

usando Sistema;
usando Domain;
Servizio namespace
{
    interfaccia pubblica IOrderService
    {

//删除
        void Delete (entità Domain.Order);

       Interroga tutti
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        oggetto Save(entità Domain.Order);

//更新
        void Update (entità Domain.Order);

  Query per ID
        Order Get(id oggetto);

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



Servizio namespace
{
    interfaccia pubblica IOrderDetailService
    {
        void Delete (System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entità);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(object id);
        oggetto GetNextDetailID(oggetto mainID);
        oggetto GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll();
        object Save (entità Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail> dettaglio);
        null Update(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entità);
    }
}



Realizzazione del servizio

usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domain;

Servizio namespace
{
    Servizio di Ordine di classe pubblica: Servizio di Ordine
    {
        pubblico<Order> IList LoadAll()
        {
            var list = OrderStock.OrderList;

            elenco dei ritorni;
        }

        oggetto pubblico GetNextID()
        {
            int id = 1;
            if (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            restituisci ID;
        }

        oggetto pubblico Salvezza (entità dell'Ordine)
        {
            OrderStock.OrderList.Add(entità);

            Restituisci l'entità. OrderID;
        }

        Aggiornamento di vuoto pubblico (entità dell'Ordine)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entità. OrderID);

            se (lista. Count<Order>() > 0)
            {
                Ordine ordine = lista. Prima();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = entità;
            }
        }

        Ordine pubblico Get(oggetto id)
        {
            entità d'ordine = nulla;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            se (lista. Count<Order>() > 0)
            {
                Ordine ordine = lista. Prima();
                entità = OrdineStock.ListaOrdine[OrdineStock.ListaOrdine.IndiceIndiceDie(ordine)];
            }
            restituire entità;
        }

        Vuoto pubblico Elimina (entità di ordine)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entità. OrderID);
            se (lista. Count<Order>() > 0)
            {
                Ordine ordine = lista. Prima();
                OrdineStock.ListaOrdine.Rimuove(ordine);
            }
        }
    }
}





usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domain;

Servizio namespace
{
    Ordine di classe pubblica OrderDetailService : IOrderDetailService
    {
        Identificativo pubblico<Ordine, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            Ritorno Dic;
        }

        oggetto pubblico GetNextID()
        {
            int id = 1;
            if (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            restituisci ID;
        }

        oggetto pubblico GetNextDetailID(oggetto 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();
                Lista VAR = Elemento. Value.Where(w => w.DetailID == (int)mainID);
                se (lista. Count<OrderDetail>() > 0)
                {
                    id = lista. First(). DetailID + 1;
                }
            }
            restituisci ID;
        }

        Salvezza di oggetto pubblico (Entità dell'ordine,<OrderDetail> dettaglio IList)
        {
            risultato oggetto = nullo;
            se (! OrderStock.Orders.ContainsKey(entity))
            {
                OrderStock.Orders.Add(entità, dettaglio);
                risultato = entità. OrderID;
            }
            risultato di ritorno;
        }

        Public void Update(KeyValuePair<Order, <OrderDetail>IList> entità)
        {
            if if (OrderStock.Orders.ContainsKey(entity. Tonalità))
            {
                OrderStock.Orders[entity. Tonalità] = entità. Valore;
            }
        }

        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)
            {
                entità = dic.First();
            }
            
            restituire entità;
        }

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



Test

usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
utilizzando NUnit.Framework;
uso del Servizio;
usando Domain;

Namespace ServiceTest
{
    [TestFitture]
    Classe pubblica OrderServiceTest
    {
        m_service privato IOrderService;

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

        [Test]
        vuoto pubblico LoadAllTest()
        {
           var list= m_service. LoadAll();
           foreach (elemento var nella lista)
           {
               Console.WriteLine(elemento. OrderID);
               Console.WriteLine(elemento. OrderAdress);
               Console.WriteLine(elemento. OrderDate);
               Console.WriteLine(elemento. OrderTel);
           }
           Assert.IsNotNull(lista);
        }

        [Test]
        vuoto pubblico Salva()
        {
            Entità Ordine = nuovo Ordine()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumqi",
                OrderTel = "123123"
            };
            oggetto obj = m_service. Salvezza (entità);
           
            Assert.IsNotNull(obj);
        }

        [Test]
        Aggiornamento sull'ambiente pubblico ()
        {
            Entità d'ordine = m_service. Get(1);
            entità. OrderAdress = "Korla";
            m_service. Aggiornamento(entità);
        }

        [Test]
        public void Delete()
        {
            Entità d'ordine = m_service. Get(1);
            entità. OrderAdress = "Korla";
            m_service. Elimina(entità);
        }
    }
}



usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
utilizzando NUnit.Framework;
uso del Servizio;
usando Domain;

Namespace ServiceTest
{
    [TestFitture]
    classe pubblica OrderServiceDetailTest
    {
        m_service privata IOrderDetailService;

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

        [Test]
        vuoto pubblico LoadAllTest()
        {
           var list= m_service. LoadAll();
           foreach (elemento var nella lista)
           {
               Console.WriteLine("-------------- Order ----------");
               Console.WriteLine(elemento. Key.OrderID);
               Console.WriteLine(elemento. Key.OrderAdress);
               Console.WriteLine(elemento. Key.OrderDate);
               Console.WriteLine(elemento. Key.OrderTel);
               Console.WriteLine("-------------- Dettaglio Ordine ----------");
               Foreach (var li in item. Valore)
               {
                   Console.WriteLine(li.DetailID);
                   Console.WriteLine(li.Price);
                   Console.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(lista);
        }

        [Test]
        vuoto pubblico Salva()
        {
            int id = (int)m_service. GetNextID();
            Entità Ordine = nuovo Ordine()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumqi",
                OrderTel = "123123"
            };
            <OrderDetail> IList list = nuova lista<OrderDetail>();
            per (int i = 0; Ho < 3; i++)
            {
                lista. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Prezzo=10+i,
                    Quantità=i+100,
                    ProductID = 1000 + i
                });
            }
            oggetto obj = m_service. Salvezza (entità, lista);
           
            Assert.IsNotNull(obj);
        }

        [Test]
        Aggiornamento sull'ambiente pubblico ()
        {
            entità var = m_service. Get(1);

            entità. Value[0] = nuovo OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Prezzo = 13,34M,
                Quantità = 200,1M
            };
            m_service. Aggiornamento(entità);
        }

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



Nota: Devi fare riferimento allo strumento nunit.framework durante i test




Precedente:Condividi due strumenti di attacco CC, buoni per i test di stress
Prossimo:Bi Fujian ha pubblicato una lettera di scuse su Weibo: Mi sento molto in colpa e triste
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com