|
|
Opublikowano 10.04.2015 17:22:50
|
|
|

IDictionary jest bazowym interfejsem dla ogólnej kolekcji par klucz/wartość, z których każda jest parą klucz-wartość w obiekcie keyValuePair.
Każda para musi mieć unikalny klucz. Implementacja różni się tym, czy pozwolić, aby klucz był pustym punktem odniesienia (nic w Visual Basic). Ta wartość może być pustą referencją (nic w Visual Basic) i nie musi być unikalna. Interfejs IDictionary pozwala na wyliczenie kluczy i wartości, które zawiera, ale nie oznacza to konkretnej kolejności sortowania.
Polecenie foreach w języku C# (For Each w Visual Basic i for Each w C++) wymaga typu każdego elementu w kolekcji. Ponieważ każdy element IDictionary jest parą klucz/wartość, typ elementu nie jest ani typem klucza, ani typem wartości. Zamiast tego jest to typ KeyValuePair.
Oto prosty przykładowy program
Klasa podmiotu:
Domena przestrzeni nazw
{
//订单 Order klasy publicznej { public int OrderID { get; set; }
/// <summary> Data zamówienia /// </summary> public DateTime OrderDate { get; set; }
/// <summary> Adres zamówienia /// </summary> public string OrderAdress { get; set; }
/// <summary> Zamów telefon /// </summary> publiczny ciąg OrderTel { get; set; } }
}
//订单明细
Domena przestrzeni nazw
{ Klasa publiczna OrderDetail { public int DetailID { get; set; }
public int ProductID { get; set; }
/// <summary> Ilość /// </summary> publicznie dziesiętna Wielkość { get; set; }
/// <summary> Cena jednostkowa /// </summary> publicznie dziesiętna Cena { get; set; } }
}
//存放数据
z wykorzystaniem System; używając System.Collections.Generic; używając System.Linq; używając System.Text; używając domeny;
Usługa przestrzeni nazw
{ publiczna klasa statyczna OrderStock { prywatny statyczny IList<Order> m_orderList = nowa List<Order>(); Zdefiniuj ogólne pole dla Listy
publiczny statyczny<Order> IList OrderList// definiuje ogólną właściwość Listy { Pobierz { powrót m_orderList; } Zestaw { m_orderList = wartość; } }
prywatny statyczny IDictionary<Order, IList<OrderDetail>> m_orders = nowy Dictionary<Order, <OrderDetail>IList>();
//定义了一个Dictionary的泛型字段,
public static IDictionary<Order, IList<OrderDetail>> Orders/ definiuje ogólną właściwość słownika { Pobierz { powrót m_orders; } Zestaw { m_orders = wartość; } } }
}
Interfejsy usług
z wykorzystaniem System; używając domeny; Usługa przestrzeni nazw
{ Public Interface IOrderService {
//删除 void Delete(Domain.Order entity);
Zapytaj wszystkich System.Collections.Generic.IList<Domain.Order> LoadAll();
//保存 obiekt Save(Domain.Order encja);
//更新 void Update(Domain.Order encja);
Zapytanie według ID Order Get(object id);
//获取下一个ID obiekt GetNextID(); }
Usługa przestrzeni nazw
{ public interface 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); obiekt GetNextDetailID (object mainID); obiekt GetNextID(); System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll(); object Save(Domain.Order encja, System.Collections.Generic.IList<Domain.OrderDetail> szczegół); void Update(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entity); }
}
Realizacja usługi
z wykorzystaniem System; używając System.Collections.Generic; używając System.Linq; używając System.Text; używając domeny;
Usługa przestrzeni nazw
{ klasa publiczna OrderService : IOrderService { public IList<Order> LoadAll() { var list = OrderStock.OrderList;
lista zwrotów; }
obiekt publiczny GetNextID() { int id = 1; if (OrderStock.OrderList.Count > 0) { id = OrderStock.OrderList.Max(m => m.OrderID) + 1; } return id; }
obiekt publiczny Save(Order entity) { OrderStock.OrderList.Add(entity);
Zwróć byt. OrderID; }
public void Aktualizacja(Order entity) { var list = OrderStock.OrderList.Where(w => w.OrderID == encja. OrderID);
jeśli (lista. Count<Order>() > 0) { Kolejność kolejności = lista. First(); OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = podmiot; } }
public Order Get(object id) { Jednostka porządku = null; var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id); jeśli (lista. Count<Order>() > 0) { Kolejność kolejności = lista. First(); entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)]; } return entity; }
public void Delete (Order entity) { var list = OrderStock.OrderList.Where(w => w.OrderID == encja. OrderID); jeśli (lista. Count<Order>() > 0) { Kolejność kolejności = lista. First(); OrderStock.OrderList.Remove(order); } } }
}
z wykorzystaniem System; używając System.Collections.Generic; używając System.Linq; używając System.Text; używając domeny;
Usługa przestrzeni nazw
{ klasa publiczna OrderDetailService : IOrderDetailService { public IDictionary<Order, IList<OrderDetail>> LoadAll() { var dic = OrderStock.Orders;
Return DIC; }
obiekt publiczny GetNextID() { int id = 1; if (OrderStock.Orders.Count > 0) { id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1; } return id; }
obiekt publiczny 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) { element var = dic.First(); Var List = Pozycja. Value.Where(w => w.DetailID == (int)mainID); jeśli (lista. Count<OrderDetail>() > 0) { id = lista. First(). DetailID + 1; } } return id; }
obiekt publiczny Save(Order entity,<OrderDetail> IList szczegół) { wynik obiektu = null; jeśli (! OrderStock.Orders.ContainsKey(entity)) { OrderStock.Orders.Add(entity, detail); result = jednostka. OrderID; } Zwróć wynik; }
public void Update(KeyValuePair<Order, IList<OrderDetail>> entity) { if (OrderStock.Orders.ContainsKey(entity. Klucz)) { OrderStock.Orders[podmiot. Key] = byt. Wartość; } }
public KeyValuePair<Order, IList<OrderDetail>> Get(object id) {
KeyValuePair<Order, IList<OrderDetail>> entity = nowa 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. Klucz)) { OrderStock.Orders.Remove(entity. Key); } } }
}
Test
z wykorzystaniem System; używając System.Collections.Generic; używając System.Linq; używając System.Text; używając NUnit.Framework; używając usługi; używając domeny;
Przestrzeń nazw ServiceTest
{ [TestFixture] Publiczna klasa OrderServiceTest { prywatna IOrderService m_service;
[SetupUp] public void Init() { m_service = nowy OrderService(); }
[Test] public void LoadAllTest() { var list= m_service. LoadAll(); foreach (pozycja zmienna w liście) { Console.WriteLine(item. OrderID); Console.WriteLine(item. OrderAdress); Console.WriteLine(item. OrderDate); Console.WriteLine(item. OrderTel); } Assert.IsNotNull(list); }
[Test] public void Save() { Jednostka Order = nowy Order() { OrderID = (int)m_service. GetNextID(), OrderDate = DateTime.Now.AddDays(-1), OrderAdress = "Urumczi", OrderTel = "123123" }; obiekt = m_service. Save(entity);
Assert.IsNotNull(obj); }
[Test] public void Aktualizacja() { Jednostka porządku = m_service. Get(1); istota. OrderAdress = "Korla"; m_service. Aktualizacja(podmiot); }
[Test] public void Delete() { Jednostka porządku = m_service. Get(1); istota. OrderAdress = "Korla"; m_service. Delete(entity); } }
}
z wykorzystaniem System; używając System.Collections.Generic; używając System.Linq; używając System.Text; używając NUnit.Framework; używając usługi; używając domeny;
Przestrzeń nazw ServiceTest
{ [TestFixture] publiczna klasa OrderServiceDetailTest { prywatna IOrderDetailService m_service;
[SetupUp] public void Init() { m_service = nowy OrderDetailService(); }
[Test] public void LoadAllTest() { var list= m_service. LoadAll(); foreach (pozycja zmienna w liście) { Console.WriteLine("-------------- Order ----------"); Console.WriteLine(item. Key.OrderID); Console.WriteLine(item. Key.OrderAdress); Console.WriteLine(item. Key.OrderDate); Console.WriteLine(item. Key.OrderTel); Console.WriteLine("-------------- Order Detail ----------"); foreach (war. li w item. Wartość) { 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(); Jednostka Order = nowy Order() { OrderID = id, OrderDate = DateTime.Now.AddDays(-1), OrderAdress = "Urumczi", OrderTel = "123123" }; <OrderDetail> IList list = nowa List<OrderDetail>(); dla (int i = 0; I < 3; i++) { listę. Add(new OrderDetail() { DetailID = i + 1, cena=10+i, Ilość=i+100, ProductID = 1000 + i }); } obiekt = m_service. Save(entity, list);
Assert.IsNotNull(obj); }
[Test] public void Aktualizacja() { Var Entity = m_service. Get(1);
istota. Value[0] = nowy OrderDetail() { ProductID = 1000, DetailID = 1, Cena = 13,34 mln dolarów, Ilość = 200,1M }; m_service. Aktualizacja(podmiot); }
[Test] public void Delete() { Var Entity = m_service. Get(1); m_service. Delete(entity); } }
}
Uwaga: Podczas testów musisz odwołać się do narzędzia nunit.framework |
Poprzedni:Podziel się dwoma narzędziami do ataków CC, dobre do testów obciążeniowychNastępny:Bi Fujian wysłała list z przeprosinami na Weibo: Czuję się bardzo winna i smutna
|