|
|
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 stresuluiUrmător:Bi Fujian a trimis o scrisoare de scuze pe Weibo: Mă simt foarte vinovat și trist
|