|
|
Zveřejněno 10.04.2015 17:22:50
|
|
|

IDictionary je základní rozhraní pro obecnou kolekci párů klíč/hodnota, z nichž každý je dvojicí klíč-hodnota v objektu keyValuePair.
Každý pár musí mít jedinečný klíč. Implementace se liší v tom, zda povolit, aby klíč byl prázdnou referencí (ve Visual Basicu nic). Tato hodnota může být prázdná reference (ve Visual Basicu nic) a nemusí být jedinečná. Rozhraní IDictionary umožňuje enumeraci klíčů a hodnot, které obsahuje, ale to neznamená žádné konkrétní pořadí třídění.
Příkaz foreach v jazyce C# (For Each ve Visual Basic a for Each v C++) vyžaduje typ každého prvku v kolekci. Protože každý prvek IDictionary je pár klíč/hodnota, typ prvku není ani typem klíče, ani typem hodnoty. Místo toho je to typ KeyValuePair.
Tady je jednoduchý ukázkový program
Třída entit:
Doména jmenného prostoru
{
//订单 veřejné třídní řád { public int OrderID { get; set; }
/// <summary> Datum objednávky /// </summary> public DateTime OrderDate { get; set; }
/// <summary> Adresa objednávky /// </summary> public string OrderAdress { get; set; }
/// <summary> Objednejte si telefon /// </summary> public string OrderTel { get; set; } }
}
//订单明细
Doména jmenného prostoru
{ veřejné třídy OrderDetail { public int DetailID { get; set; }
public int ProductID { get; set; }
/// <summary> Množství /// </summary> veřejně desetinné množství { get; set; }
/// <summary> Jednotková cena /// </summary> veřejně desítková cena { get; set; } }
}
//存放数据
pomocí System; pomocí System.Collections.Generic; pomocí System.Linq; pomocí System.Text; pomocí domény;
Služba jmenného prostoru
{ veřejná statická třída OrderStock { soukromý statický IList<Order> m_orderList = nový List<Order>(); Definujte obecné pole pro List
<Order> public static IList OrderList// definuje obecnou vlastnost seznamu { Dostaň { return m_orderList; } Sadu { m_orderList = hodnota; } }
soukromý statický IDictionary<Order, IList<OrderDetail>> m_orders = nový Dictionary<Order, <OrderDetail>IList>();
//定义了一个Dictionary的泛型字段,
public static IDictionary<Order, IList<OrderDetail>> Orders/ definuje obecnou vlastnost slovníku { Dostaň { návrat m_orders; } Sadu { m_orders = hodnota; } } }
}
Rozhraní služeb
pomocí System; pomocí domény; Služba jmenného prostoru
{ veřejné rozhraní IOrderService {
//删除 void Delete(Domain.Order entity);
Dotazovat všechny System.Collections.Generic.IList<Domain.Order> LoadAll();
//保存 objekt Uložit(Domain.Order entita);
//更新 void Update(Domain.Order entita);
Dotaz podle ID Order Get (objekt id);
//获取下一个ID objekt GetNextID(); }
Služba jmenného prostoru
{ veřejné rozhraní 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); objekt GetNextDetailID(objekt 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); }
}
Realizace služby
pomocí System; pomocí System.Collections.Generic; pomocí System.Linq; pomocí System.Text; pomocí domény;
Služba jmenného prostoru
{ public class OrderService : IOrderService { public IList<Order> LoadAll() { var list = OrderStock.OrderList;
seznam návratů; }
veřejný objekt GetNextID() { int id = 1; if (OrderStock.OrderList.Count > 0) { id = OrderStock.OrderList.Max(m => m.OrderID) + 1; } return id; }
veřejný objekt Uložit(Order entity) { OrderStock.OrderList.Add(entity);
Vrátit entitu. OrderID; }
public void Aktualizace (Order entity) { var list = OrderStock.OrderList.Where(w => w.OrderID == entita. OrderID);
pokud (seznam. Count<Order>() > 0) { Pořadí = seznam. First(); OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = entita; } }
public order Get(object id) { Řádová entita = null; var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id); pokud (seznam. Count<Order>() > 0) { Pořadí = seznam. First(); entita = ObjednávkaZásoba.ObjednávkaSeznam[ObjednávkaZásoba.Objednávka.IndexIndexOf(objednávky)]; } return entity; }
public void Delete (Order entity) { var list = OrderStock.OrderList.Where(w => w.OrderID == entita. OrderID); pokud (seznam. Count<Order>() > 0) { Pořadí = seznam. First(); OrderStock.OrderList.Remove(order); } } }
}
pomocí System; pomocí System.Collections.Generic; pomocí System.Linq; pomocí System.Text; pomocí domény;
Služba jmenného prostoru
{ public class OrderDetailService : IOrderDetailService { public IDictionary<Order, IList<OrderDetail>> LoadAll() { var dic = ObjednávkaZásoby.Objednávky;
return dic; }
veřejný objekt GetNextID() { int id = 1; if (OrderStock.Orders.Count > 0) { id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1; } return 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, IList<OrderDetail>>>() > 0) { var item = dic.First(); var list = položka. Value.Where(w => w.DetailID == (int)mainID); pokud (seznam. Count<OrderDetail>() > 0) { id = seznam. First(). DetailID + 1; } } return id; }
veřejný objekt Uložit (Order entity,<OrderDetail> IList detail) { objekt result = null; pokud (! OrderStock.Orders.ContainsKey(entity)) { OrderStock.Orders.Add(entity, detail); výsledek = entita. OrderID; } Výsledek vrátit; }
public void Update(KeyValuePair<Order, IList<OrderDetail>> entity) { if (OrderStock.Orders.ContainsKey(entity. Key)) { ObjednávkaZásoby. Objednávky[entita. Key] = entita. Hodnota; } }
public KeyValuePair<Order, IList<OrderDetail>> Get(object id) {
KeyValuePair<Order, IList<OrderDetail>> entita = nový KeyValuePair<Order, IList<OrderDetail>>(); var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id); if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0) { entity = dic.First(); }
return entity; }
public void Delete(KeyValuePair<Order, IList<OrderDetail>> entity) { if (OrderStock.Orders.ContainsKey(entity. Key)) { OrderStock.Orders.Remove(entity. Key); } } }
}
Test
pomocí System; pomocí System.Collections.Generic; pomocí System.Linq; pomocí System.Text; pomocí NUnit.Framework; pomocí Service; pomocí domény;
Jmenný prostor ServiceTest
{ [TestFixture] veřejná třída OrderServiceTest { soukromý IOrderService m_service;
[SetUp] public void Init() { m_service = nový OrderService(); }
[Test] public void LoadAllTest() { var list= m_service. loadAll(); foreach (var položka v seznamu) { Console.WriteLine(položka. OrderID); Console.WriteLine(položka. OrderAdresa); Console.WriteLine(položka. Datum objednávky); Console.WriteLine(položka. OrderTel); } Assert.IsNotNull(list); }
[Test] public void Save() { Order entity = new Order() { OrderID = (int)m_service. GetNextID(), OrderDate = DateTime.Now.AddDays(-1), OrderAdress = "Urumči", OrderTel = "123123" }; objekt = m_service. Save(entity);
Assert.IsNotNull(obj); }
[Test] public void Update() { Řádová entita = m_service. Get(1); entitu. OrderAdress = "Korla"; m_service. Update(entity); }
[Test] public void Delete() { Řádová entita = m_service. Get(1); entitu. OrderAdress = "Korla"; m_service. Delete(entity); } }
}
pomocí System; pomocí System.Collections.Generic; pomocí System.Linq; pomocí System.Text; pomocí NUnit.Framework; pomocí Service; pomocí domény;
Jmenný prostor ServiceTest
{ [TestFixture] veřejná třída OrderServiceDetailTest { soukromý IOrderDetailService m_service;
[SetUp] public void Init() { m_service = nový OrderDetailService(); }
[Test] public void LoadAllTest() { var list= m_service. loadAll(); foreach (var položka v seznamu) { Console.WriteLine("-------------- Order ----------"); Console.WriteLine(položka. Key.OrderID); Console.WriteLine(položka. Key.OrderAdresa); Console.WriteLine(položka. Key.OrderDate); Console.WriteLine(položka. Key.OrderTel); Console.WriteLine("-------------- Order Detail ----------"); foreach (var li in item. Hodnota) { 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 = new Order() { OrderID = id, OrderDate = DateTime.Now.AddDays(-1), OrderAdress = "Urumči", OrderTel = "123123" }; <OrderDetail> IList list = nový List<OrderDetail>(); pro (int i = 0; Jsem < 3; i++) { seznam. Add(new OrderDetail() { DetailID = i + 1, Cena=10+i, Quantity=i+100, ProductID = 1000 + i }); } objekt = m_service. Uložit(entita, seznam);
Assert.IsNotNull(obj); }
[Test] public void Update() { entita var = m_service. Get(1);
entitu. Value[0] = nový OrderDetail() { ProductID = 1000, DetailID = 1, Cena = 13,34 milionu, Množství = 200,1M }; m_service. Update(entity); }
[Test] public void Delete() { entita var = m_service. Get(1); m_service. Delete(entity); } }
}
Poznámka: Při testování je potřeba se odvolávat na nástroj nunit.framework |
Předchozí:Sdílím dva nástroje pro CC útoky, dobré pro zátěžové testováníDalší:Bi Fujian vydal omluvný dopis na Weibo: Cítím se velmi provinile a smutně
|