Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 22445|Jawab: 0

[Sumber] Penggunaan kelas koleksi generik (Ilist, IDictionary) di C#

[Salin tautan]
Diposting pada 10/04/2015 17.22.50 | | |

IDictionary adalah antarmuka dasar untuk kumpulan generik pasangan kunci/nilai, yang masing-masing merupakan pasangan kunci-nilai dalam objek keyValuePair.

Setiap pasangan harus memiliki kunci yang unik. Implementasi berbeda dalam apakah akan mengizinkan kunci menjadi referensi kosong atau tidak (Tidak ada di Visual Basic). Nilai ini dapat berupa referensi kosong (Tidak ada di Visual Basic) dan tidak harus unik. Antarmuka IDictionary memungkinkan pencacahan kunci dan nilai yang dikandungnya, tetapi ini tidak menyiratkan urutan pengurutan tertentu.

Pernyataan foreach dalam bahasa C# (Untuk Masing-masing di Visual Basic dan untuk masing-masing di C++) memerlukan jenis setiap elemen dalam koleksi. Karena setiap elemen IDictionary adalah pasangan kunci/nilai, jenis elemen bukanlah jenis kunci atau jenis nilai. Sebagai gantinya, ini adalah jenis KeyValuePair.



Berikut adalah contoh program sederhana



Kelas entitas:

Domain ruang nama
{

//订单
    Ketertiban kelas publik
    {
        publik int OrderID { mendapatkan; menetapkan; }

        /// <summary>
        Tanggal pemesanan
        /// </summary>
        public DateTime OrderDate { get; menetapkan; }

        /// <summary>
        Alamat pesanan
        /// </summary>
        string publik OrderAdress { get; menetapkan; }

        /// <summary>
        Pesan telepon
        /// </summary>
        string publik OrderTel { get; menetapkan; }
    }
}



//订单明细


Domain ruang nama
{
    kelas publik OrderDetail
    {
        publik int DetailID { mendapatkan; menetapkan; }

        public int ProductID { get; menetapkan; }

        /// <summary>
        kuantitas
        /// </summary>
        desimal publik Kuantitas { mendapatkan; menetapkan; }

        /// <summary>
        Harga satuan
        /// </summary>
        desimal publik Harga { dapatkan; menetapkan; }
    }
}



//存放数据

menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan Domain;

Layanan namespace
{
    kelas statis publik OrderStock
    {
        IList statis pribadi<Order> m_orderList = List<Order>(); Menentukan bidang generik untuk Daftar

        public static IList<Order> OrderList// mendefinisikan properti generik dari Daftar
        {
            dapatkan
            {
                kembali m_orderList;
            }
            mengatur
            {
                m_orderList = nilai;
            }
        }

        ID statis pribadi<Urutan, IList<OrderDetail>> m_orders = Kamus<Orde baru, IList<OrderDetail>>();

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

        ID statis publik IDictionary<Order, IList<OrderDetail>> Orders/ mendefinisikan properti generik kamus
        {
            dapatkan
            {
                kembali m_orders;
            }
            mengatur
            {
                m_orders = nilai;
            }
        }
    }
}



Antarmuka layanan

menggunakan Sistem;
menggunakan Domain;
Layanan namespace
{
    antarmuka publik IOrderService
    {

//删除
        void Delete(Domain.Order entitas);

       Kueri semua
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        objek Simpan (entitas Domain.Order);

//更新
        void Update(entitas Domain.Order);

  Kueri berdasarkan ID
        Order Get(id objek);

//获取下一个ID
        objek GetNextID();
    }



Layanan namespace
{
    antarmuka publik IOrderDetailService
    {
        void entitas 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(id objek);
        objek GetNextDetailID(objek mainID);
        objek GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll();
        objek Simpan(entitas Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail> detail);
        void Update(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>>);
    }
}



Realisasi layanan

menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan Domain;

Layanan namespace
{
    kelas publik OrderService : IOrderService
    {
        publik IList<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            daftar pengembalian;
        }

        objek publik GetNextID()
        {
            id int = 1;
            if (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            mengembalikan id;
        }

        objek publik Simpan(Entitas pesanan)
        {
            OrderStock.OrderList.Add(entitas);

            entitas pengembalian. ID Pesanan;
        }

        publik batal Update(Entitas pesanan)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entitas. ID Pesanan);

            if (daftar. Hitung <Order>() > 0)
            {
                Urutan pesanan = daftar. Pertama();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = entitas;
            }
        }

        Pesanan publik Get(id objek)
        {
            Entitas pesanan = null;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            if (daftar. Hitung <Order>() > 0)
            {
                Urutan pesanan = daftar. Pertama();
                entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)];
            }
            entitas pengembalian;
        }

        publik void Hapus(Entitas pesanan)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entitas. ID Pesanan);
            if (daftar. Hitung <Order>() > 0)
            {
                Urutan pesanan = daftar. Pertama();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan Domain;

Layanan namespace
{
    kelas publik OrderDetailService : IOrderDetailService
    {
        Identifikasi publik<Order, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            mengembalikan dic;
        }

        objek publik GetNextID()
        {
            id int = 1;
            if (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            mengembalikan id;
        }

        objek publik GetNextDetailID(objek mainID)
        {
            id int = 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 = item. Value.Where(w => w.DetailID == (int)mainID);
                if (daftar. Hitung <OrderDetail>() > 0)
                {
                    id = daftar. Pertama(). ID Detail + 1;
                }
            }
            mengembalikan id;
        }

        objek publik Simpan(Entitas pesanan, detail IList<OrderDetail>)
        {
            hasil objek = null;
            jika (! OrderStock.Orders.ContainsKey(entitas))
            {
                OrderStock.Orders.Add(entitas, detail);
                result = entitas. ID Pesanan;
            }
            mengembalikan hasil;
        }

        public void Update(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            if (OrderStock.Orders.ContainsKey(entitas. Kunci))
            {
                OrderStock.Orders[entitas. Kunci] = entitas. Nilai;
            }
        }

        publik KeyValuePair<Order, IList<OrderDetail>> Get(id objek)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> entitas = KeyValuePair<Order, IList<OrderDetail>>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                entitas = dic.First();
            }
            
            entitas pengembalian;
        }

        public void Delete(KeyValuePair<Order, IList<OrderDetail>> entitas)
        {
            if (OrderStock.Orders.ContainsKey(entitas. Kunci))
            {
                OrderStock.Orders.Remove(entitas. kunci);
            }
        }
    }
}



Ujian

menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan NUnit.Framework;
menggunakan Layanan;
menggunakan Domain;

namespace ServiceTest
{
    [Perlengkapan Tes]
    kelas publik OrderServiceTest
    {
        m_service Layanan IOrder pribadi;

        [Pengaturan]
        publik void Init()
        {
            m_service = OrderService();
        }

        [Uji]
        publik membatalkan LoadAllTest()
        {
           var list= m_service. MuatSemua();
           foreach (item var dalam daftar)
           {
               Console.WriteLine(item. ID Pesanan);
               Console.WriteLine(item. OrderAddresss);
               Console.WriteLine(item. Tanggal Pemesanan);
               Console.WriteLine(item. OrderTel);
           }
           Assert.IsNotNull(daftar);
        }

        [Uji]
        publik void Simpan()
        {
            Entitas pesanan = pesanan baru ()
            {
                ID Pesanan = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumqi",
                OrderTel = "123123"
            };
            objek obj = m_service. Simpan(entitas);
           
            Assert.IsNotNull(obj);
        }

        [Uji]
        publik void Update()
        {
            Entitas pesanan = m_service. Dapatkan(1);
            entitas. OrderAdress = "Korla";
            m_service. Perbarui (entitas);
        }

        [Uji]
        publik void Hapus()
        {
            Entitas pesanan = m_service. Dapatkan(1);
            entitas. OrderAdress = "Korla";
            m_service. Hapus(entitas);
        }
    }
}



menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan NUnit.Framework;
menggunakan Layanan;
menggunakan Domain;

namespace ServiceTest
{
    [Perlengkapan Tes]
    kelas publik OrderServiceDetailTest
    {
        m_service Layanan Detail pribadi IOrderDetail;

        [Pengaturan]
        publik void Init()
        {
            m_service = OrderDetailService(); baru
        }

        [Uji]
        publik membatalkan LoadAllTest()
        {
           var list= m_service. MuatSemua();
           foreach (item var dalam daftar)
           {
               Console.WriteLine("-------------- Order ----------");
               Console.WriteLine(item. Key.OrderID);
               Console.WriteLine(item. Key.OrderAddresss);
               Console.WriteLine(item. Kunci.TanggalPesanan);
               Console.WriteLine(item. Kunci.OrderTel);
               Console.WriteLine("-------------- Detail Pesanan ----------");
               foreach (var li dalam item. Nilai)
               {
                   Console.WriteLine(li.DetailID);
                   Console.WriteLine(li.Price);
                   Console.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(daftar);
        }

        [Uji]
        publik void Simpan()
        {
            int id = (int)m_service. GetNextID();
            Entitas pesanan = pesanan baru ()
            {
                ID pesanan = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAdress = "Urumqi",
                OrderTel = "123123"
            };
            Daftar IList<OrderDetail> = Daftar baru<OrderDetail>();
            untuk (int i = 0; saya < 3; i++)
            {
                daftar. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Harga=10+i,
                    Kuantitas = i + 100,
                    ID Produk = 1000 + i
                });
            }
            objek obj = m_service. Simpan(entitas, daftar);
           
            Assert.IsNotNull(obj);
        }

        [Uji]
        publik void Update()
        {
            var entity = m_service. Dapatkan(1);

            entitas. Value[0] = new OrderDetail()
            {
                ID Produk = 1000,
                ID Detail = 1,
                Harga = 13.34M,
                Kuantitas = 200.1M
            };
            m_service. Perbarui (entitas);
        }

        [Uji]
        publik void Hapus()
        {
            var entity = m_service. Dapatkan(1);
            m_service. Hapus(entitas);
        }
    }
}



Catatan: Anda perlu mereferensikan alat nunit.framework saat menguji




Mantan:Bagikan dua alat serangan CC, bagus untuk pengujian stres
Depan:Bi Fujian mengeluarkan surat permintaan maaf di Weibo: Saya merasa sangat bersalah dan sedih
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com