Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 22445|Απάντηση: 0

[Πηγή] Η χρήση γενικών κλάσεων συλλογής (Ilist, IDictionary) στη C#

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 10/4/2015 5:22:50 μ.μ. | | |

Το IDictionary είναι η βασική διεπαφή για μια γενική συλλογή ζευγών κλειδιών/τιμών, καθένα από τα οποία είναι ένα ζεύγος κλειδιού-τιμής στο αντικείμενο keyValuePair.

Κάθε ζευγάρι πρέπει να έχει ένα μοναδικό κλειδί. Η υλοποίηση διαφέρει ως προς το αν θα επιτρέπεται ή όχι στο κλειδί να είναι κενή αναφορά (Τίποτα στη Visual Basic). Αυτή η τιμή μπορεί να είναι μια κενή αναφορά (Τίποτα στη Visual Basic) και δεν χρειάζεται να είναι μοναδική. Η διεπαφή IDictionary επιτρέπει την απαρίθμηση των κλειδιών και των τιμών που περιέχει, αλλά αυτό δεν συνεπάγεται κάποια συγκεκριμένη σειρά ταξινόμησης.

Η πρόταση foreach στη γλώσσα C# (Για κάθε στη Visual Basic και για κάθε στη C++) απαιτεί τον τύπο κάθε στοιχείου στη συλλογή. Δεδομένου ότι κάθε στοιχείο του IDictionary είναι ένα ζεύγος κλειδιού/τιμής, ο τύπος στοιχείου δεν είναι ούτε τύπος κλειδιού ούτε τύπος τιμής. Αντίθετα, είναι ένας τύπος KeyValuePair.



Εδώ είναι ένα απλό παράδειγμα προγράμματος



Κατηγορία οντότητας:

Τομέας χώρου ονομάτων
{

//订单
    Τάξη δημόσιας τάξης
    {
        public int OrderID { get; σειρά; }

        /// <summary>
        Ημερομηνία παραγγελίας
        /// </summary>
        δημόσιο DateTime OrderDate { get; σειρά; }

        /// <summary>
        Διεύθυνση παραγγελίας
        /// </summary>
        δημόσια συμβολοσειρά OrderAdress { get; σειρά; }

        /// <summary>
        Παραγγελία τηλεφώνου
        /// </summary>
        δημόσια συμβολοσειρά OrderTel { get; σειρά; }
    }
}



//订单明细


Τομέας χώρου ονομάτων
{
    Παραγγελία δημόσιας τάξηςΛεπτομέρεια
    {
        public int DetailID { get; σειρά; }

        public int ProductID { get; σειρά; }

        /// <summary>
        Ποσότητα
        /// </summary>
        δημόσιο δεκαδικό Ποσότητα { πάρτε; σειρά; }

        /// <summary>
        Τιμή μονάδος
        /// </summary>
        δημόσιο δεκαδικό Τιμή { πάρτε; σειρά; }
    }
}



//存放数据

χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας το System.Collections.Generic.
χρησιμοποιώντας το System.Linq.
χρησιμοποιώντας το System.Text.
χρησιμοποιώντας τον τομέα.

Υπηρεσία χώρου ονομάτων
{
    δημόσια στατική κλάση OrderStock
    {
        ιδιωτικό στατικό IList<Order> m_orderList = νέα List<Order>(); Ορισμός γενικού πεδίου για μια λίστα

        δημόσια στατική IList<Order> OrderList// ορίζει μια γενική ιδιότητα μιας λίστας
        {
            παίρνω
            {
                επιστροφή m_orderList?
            }
            σετ
            {
                m_orderList = τιμή;
            }
        }

        ιδιωτικό στατικό IDictionary<Order, IList<OrderDetail>> m_orders = νέο Λεξικό<Order, IList<OrderDetail>>();

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

        δημόσιο στατικό IDictionary<Order, IList<OrderDetail>> Orders/ ορίζει μια γενική ιδιότητα ενός λεξικού
        {
            παίρνω
            {
                επιστροφή m_orders?
            }
            σετ
            {
                m_orders = τιμή;
            }
        }
    }
}



Διεπαφές υπηρεσιών

χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας τον τομέα.
Υπηρεσία χώρου ονομάτων
{
    δημόσια διεπαφή IOrderService
    {

//删除
        void Delete(οντότητα Domain.Order);

       Ερώτηση όλων
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        αντικείμενο Save(οντότητα Domain.Order);

//更新
        void Update(οντότητα Domain.Order);

  Ερώτημα με αναγνωριστικό
        Παραγγελία Get(αναγνωριστικό αντικειμένου);

//获取下一个ID
        αντικείμενο GetNextID();
    }



Υπηρεσία χώρου ονομάτων
{
    δημόσια διεπαφή IOrderDetailService
    {
        void Delete(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> οντότητα);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(αναγνωριστικό αντικειμένου);
        αντικείμενο GetNextDetailID(κύριο αναγνωριστικό αντικειμένου);
        αντικείμενο GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll();
        αντικείμενο Save(οντότητα Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail> λεπτομέρεια);
        void Update(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> οντότητα);
    }
}



Υλοποίηση υπηρεσιών

χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας το System.Collections.Generic.
χρησιμοποιώντας το System.Linq.
χρησιμοποιώντας το System.Text.
χρησιμοποιώντας τον τομέα.

Υπηρεσία χώρου ονομάτων
{
    Υπηρεσία Παραγγελίας Δημόσιας Τάξης: IOrderService
    {
        δημόσιο IList<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            λίστα επιστροφής?
        }

        δημόσιο αντικείμενο GetNextID()
        {
            int id = 1;
            αν (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            αναγνωριστικό επιστροφής;
        }

        δημόσιο αντικείμενο Save(Οντότητα παραγγελίας)
        {
            OrderStock.OrderList.Add(οντότητα);

            οντότητα επιστροφής. Αναγνωριστικό παραγγελίας;
        }

        Ενημέρωση δημόσιου κενού (Οντότητα παραγγελίας)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == οντότητα. Αναγνωριστικό παραγγελίας);

            Αν (λίστα. Πλήθος<Order>() > 0)
            {
                Σειρά παραγγελίας = λίστα. Πρώτη();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(παραγγελία)] = οντότητα;
            }
        }

        public Order Get(αναγνωριστικό αντικειμένου)
        {
            Οντότητα παραγγελίας = null;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            Αν (λίστα. Πλήθος<Order>() > 0)
            {
                Σειρά παραγγελίας = λίστα. Πρώτη();
                οντότητα = OrderStock.OrderList[OrderStock.OrderList.IndexOf(παραγγελία)];
            }
            οντότητα επιστροφής·
        }

        δημόσιο κενό Διαγραφή (Παραγγελία οντότητας)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == οντότητα. Αναγνωριστικό παραγγελίας);
            Αν (λίστα. Πλήθος<Order>() > 0)
            {
                Σειρά παραγγελίας = λίστα. Πρώτη();
                OrderStock.OrderList.Remove(παραγγελία);
            }
        }
    }
}





χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας το System.Collections.Generic.
χρησιμοποιώντας το System.Linq.
χρησιμοποιώντας το System.Text.
χρησιμοποιώντας τον τομέα.

Υπηρεσία χώρου ονομάτων
{
    δημόσια τάξη OrderDetailService : IOrderDetailService
    {
        δημόσια ταυτότηταΛεξικό<Παραγγελία, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            επιστροφή dic?
        }

        δημόσιο αντικείμενο GetNextID()
        {
            int id = 1;
            αν (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            αναγνωριστικό επιστροφής;
        }

        δημόσιο αντικείμενο GetNextDetailID(κύριο αναγνωριστικό αντικειμένου)
        {
            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 = στοιχείο. Τιμή.Where(w => w.DetailID == (int)mainID);
                Αν (λίστα. Αριθμός<OrderDetail>() > 0)
                {
                    id = λίστα. First(). Αναγνωριστικό λεπτομέρειας + 1;
                }
            }
            αναγνωριστικό επιστροφής;
        }

        δημόσιο αντικείμενο Save(Οντότητα παραγγελίας, λεπτομέρεια IList<OrderDetail>)
        {
            αποτέλεσμα αντικειμένου = null;
            αν (! OrderStock.Orders.ContainsKey(οντότητα))
            {
                OrderStock.Orders.Add(οντότητα, λεπτομέρεια);
                αποτέλεσμα = οντότητα. Αναγνωριστικό παραγγελίας;
            }
            αποτέλεσμα επιστροφής?
        }

        public void Update(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            if (OrderStock.Orders.ContainsKey(entity. Κλειδί))
            {
                OrderStock.Orders[οντότητα. Key] = οντότητα. αξία;
            }
        }

        public KeyValuePair<Order, IList<OrderDetail>> Get(αναγνωριστικό αντικειμένου)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> οντότητα = νέο KeyValuePair<Order, IList<OrderDetail>>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                οντότητα = dic.First();
            }
            
            οντότητα επιστροφής·
        }

        δημόσιο κενό Delete(KeyValuePair<Order, IList<OrderDetail>> οντότητα)
        {
            if (OrderStock.Orders.ContainsKey(entity. Κλειδί))
            {
                OrderStock.Orders.Remove(entity. Κλειδί);
            }
        }
    }
}



Δοκιμή

χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας το System.Collections.Generic.
χρησιμοποιώντας το System.Linq.
χρησιμοποιώντας το System.Text.
χρησιμοποιώντας το NUnit.Framework.
χρήση της Υπηρεσίας.
χρησιμοποιώντας τον τομέα.

χώρος ονομάτων ServiceTest
{
    [Εξάρτημα δοκιμής]
    δημόσια τάξη OrderServiceTest
    {
        ιδιωτικό IOrderService m_service;

        [Ρύθμιση]
        δημόσιο κενό Init()
        {
            m_service = νέα OrderService();
        }

        [Δοκιμή]
        δημόσιο κενό LoadAllTest()
        {
           var list= m_service. LoadAll();
           foreach (στοιχείο var στη λίστα)
           {
               Console.WriteLine(item. Αναγνωριστικό παραγγελίας);
               Console.WriteLine(item. Διεύθυνση Παραγγελίας);
               Console.WriteLine(item. OrderDate);
               Console.WriteLine(item. ΠαραγγελίαΤηλ);
           }
           Assert.IsNotNull(λίστα);
        }

        [Δοκιμή]
        δημόσιο κενό Save()
        {
            Οντότητα παραγγελίας = new Order()
            {
                ΚωδΠαραγγελίας = (int)m_service. GetNextID(),
                ΗμερομηνίαΠαραγγελίας = ΗμερομηνίαΏρα.Τώρα.AddDays(-1),
                Διεύθυνση Παραγγελίας = "Urumqi",
                OrderTel = "123123"
            };
            αντικείμενο obj = m_service. Save(οντότητα);
           
            Assert.IsNotNull(obj);
        }

        [Δοκιμή]
        δημόσιο κενό Ενημέρωση()
        {
            Οντότητα παραγγελίας = m_service. Πάρτε(1);
            οντότητα. Διεύθυνση Παραγγελίας = "Korla";
            m_service. Ενημέρωση(οντότητα);
        }

        [Δοκιμή]
        δημόσιο κενό Delete()
        {
            Οντότητα παραγγελίας = m_service. Πάρτε(1);
            οντότητα. Διεύθυνση Παραγγελίας = "Korla";
            m_service. Delete(οντότητα);
        }
    }
}



χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας το System.Collections.Generic.
χρησιμοποιώντας το System.Linq.
χρησιμοποιώντας το System.Text.
χρησιμοποιώντας το NUnit.Framework.
χρήση της Υπηρεσίας.
χρησιμοποιώντας τον τομέα.

χώρος ονομάτων ServiceTest
{
    [Εξάρτημα δοκιμής]
    δημόσιας τάξης OrderServiceDetailTest
    {
        ιδιωτικό IOrderDetailService m_service;

        [Ρύθμιση]
        δημόσιο κενό Init()
        {
            m_service = νέα OrderDetailService();
        }

        [Δοκιμή]
        δημόσιο κενό LoadAllTest()
        {
           var list= m_service. LoadAll();
           foreach (στοιχείο var στη λίστα)
           {
               Console.WriteLine("-------------- Παραγγελία ----------");
               Console.WriteLine(item. Key.OrderID);
               Console.WriteLine(item. Key.OrderAdress);
               Console.WriteLine(item. Key.OrderDate);
               Console.WriteLine(item. Key.OrderTel);
               Console.WriteLine("-------------- Λεπτομέρειες παραγγελίας ----------");
               foreach (var li στο στοιχείο. Αξία)
               {
                   Console.WriteLine(li.DetailID);
                   Console.WriteLine(li.Price);
                   Console.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(λίστα);
        }

        [Δοκιμή]
        δημόσιο κενό Save()
        {
            int id = (int)m_service. GetNextID();
            Οντότητα παραγγελίας = new Order()
            {
                ΚωδΠαραγγελίας = αναγνωριστικό,
                ΗμερομηνίαΠαραγγελίας = ΗμερομηνίαΏρα.Τώρα.AddDays(-1),
                Διεύθυνση Παραγγελίας = "Urumqi",
                OrderTel = "123123"
            };
            IList<OrderDetail> list = νέα List<OrderDetail>();
            για (int i = 0; i < 3; i++)
            {
                λίστα. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Τιμή=10+i,
                    Ποσότητα=i+100,
                    ΚωδΠροϊόντος = 1000 + i
                });
            }
            αντικείμενο obj = m_service. Save(οντότητα; λίστα);
           
            Assert.IsNotNull(obj);
        }

        [Δοκιμή]
        δημόσιο κενό Ενημέρωση()
        {
            var οντότητα = m_service. Πάρτε(1);

            οντότητα. Value[0] = νέα OrderDetail()
            {
                ΚωδΠροϊόντος = 1000,
                Αναγνωριστικό λεπτομέρειας = 1,
                Τιμή = 13,34 εκατ.,
                Ποσότητα = 200.1M
            };
            m_service. Ενημέρωση(οντότητα);
        }

        [Δοκιμή]
        δημόσιο κενό Delete()
        {
            var οντότητα = m_service. Πάρτε(1);
            m_service. Delete(οντότητα);
        }
    }
}



Σημείωση: Πρέπει να αναφέρετε το εργαλείο nunit.framework κατά τη δοκιμή




Προηγούμενος:Μοιραστείτε δύο εργαλεία επίθεσης CC, καλά για stress test
Επόμενος:Ο Bi Fujian εξέδωσε επιστολή συγγνώμης στο Weibo: Νιώθω πολύ ένοχος και λυπημένος
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com