Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 22445|Odpowiedź: 0

[Źródło] Użycie klas zbiorów ogólnych (Ilist, IDictionary) w C#

[Skopiuj link]
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ążeniowych
Następny:Bi Fujian wysłała list z przeprosinami na Weibo: Czuję się bardzo winna i smutna
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com