Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 22445|Respuesta: 0

[Fuente] El uso de clases genéricas de colección (Ilist, IDictionary) en C#

[Copiar enlace]
Publicado en 10/4/2015 17:22:50 | | |

IDictionary es la interfaz base para una colección genérica de pares clave/valor, cada uno de los cuales es un par clave-valor en el objeto keyValuePair.

Cada par debe tener una clave única. La implementación difiere en si permitir o no que la clave sea una referencia vacía (Nothing in Visual Basic). Este valor puede ser una referencia vacía (Nada en Visual Basic) y no tiene por qué ser único. La interfaz IDictionary permite enumerar las claves y valores que contiene, pero esto no implica un orden de ordenación específico.

La sentencia foreach en el lenguaje C# (For Each en Visual Basic y For Each en C++) requiere el tipo de cada elemento de la colección. Dado que cada elemento de IDictionary es un par clave/valor, el tipo de elemento no es ni un tipo de clave ni un tipo de valor. En cambio, es un tipo KeyValuePair.



Aquí tienes un ejemplo sencillo de programa



Clase de entidad:

Espacio de nombres Dominio
{

//订单
    Orden de clase pública
    {
        public int OrderID { get; set; }

        /// <summary>
        Fecha del pedido
        /// </summary>
        Public DateTime OrderDate { get; set; }

        /// <summary>
        Dirección de la orden
        /// </summary>
        cadena pública OrderAdress { get; set; }

        /// <summary>
        Pedido teléfono
        /// </summary>
        cadena pública OrderTel { get; set; }
    }
}



//订单明细


Espacio de nombres Dominio
{
    Clase pública OrdenDetalle
    {
        public int DetailID { get; set; }

        public int ProductID { get; set; }

        /// <summary>
        Cantidad
        /// </summary>
        decimal público Cantidad { get; set; }

        /// <summary>
        Precio unitario
        /// </summary>
        decimal público Price { get; set; }
    }
}



//存放数据

usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domain;

Servicio de espacio de nombres
{
    Clase pública estática OrderStock
    {
        IList estático<Order> privado m_orderList = nueva Lista<Order>(); Define un campo genérico para una Lista

        IList estático<Order> público OrderList// define una propiedad genérica de una Lista
        {
            Obtener
            {
                regreso m_orderList;
            }
            Set
            {
                m_orderList = valor;
            }
        }

        identificacionario estático privado<Order, IList<OrderDetail>> m_orders = nuevo Diccionario<Orden, <OrderDetail>IList>();

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

        IDictionary<Order, IList<OrderDetail>> Orders/ estático público define una propiedad genérica de un diccionario
        {
            Obtener
            {
                regreso m_orders;
            }
            Set
            {
                m_orders = valor;
            }
        }
    }
}



Interfaces de servicio

usando Sistema;
usando Domain;
Servicio de espacio de nombres
{
    interfaz pública IOrderService
    {

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

       Consulta a todos
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        objeto Save(entidad Domain.Order);

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

  Consulta por ID
        Orden Get(id de objeto);

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



Servicio de espacio de nombres
{
    interfaz pública IOrderDetailService
    {
        void Delete(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entidad);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(id de objeto);
        objeto GetNextDetailID(mainID del objeto);
        objeto GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll();
        objeto Save(entidad Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail> detalle);
        actualización void (System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entidad);
    }
}



Realización del servicio

usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domain;

Servicio de espacio de nombres
{
    Servicio de Orden de clase pública: Servicio de Seguridad
    {
        IList público<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            lista de retorno;
        }

        objeto público GetNextID()
        {
            int id = 1;
            si (OrderStock.OrderList.Count > 0)
            {
                id = OrdenStock.ListaDeOrden.Max(m => m.IDorden) + 1;
            }
            devolver identidad;
        }

        objeto público Guardar (entidad de orden)
        {
            OrdenStock.ListaOrden.Añadir(entidad);

            Devolver la entidad. OrderID;
        }

        Actualización de vacío público (entidad de orden)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);

            Si (lista. Cuenta<Order>() > 0)
            {
                Orden de orden = lista. Primero();
                OrdenStock.ListaDeOrden[OrdenStock.ListaDeOrdenIndexOf(orden)] = entidad;
            }
        }

        Orden público Get(id de objeto)
        {
            entidad de orden = nulo;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            Si (lista. Cuenta<Order>() > 0)
            {
                Orden de orden = lista. Primero();
                entidad = OrdenStock.ListaDeOrden[OrdenStock.ListaDeOrdenÍndiceOf(orden)];
            }
            entidad de retorno;
        }

        Vacío público Eliminar (entidad de orden)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);
            Si (lista. Cuenta<Order>() > 0)
            {
                Orden de orden = lista. Primero();
                OrdenStock.OrdenLista.Eliminar(orden);
            }
        }
    }
}





usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domain;

Servicio de espacio de nombres
{
    clase pública OrderDetailService: IOrderDetailService
    {
        Public IDictionary<Order, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            Devolver a Dic;
        }

        objeto público GetNextID()
        {
            int id = 1;
            si (OrderStock.Orders.Count > 0)
            {
                id = OrdenStock.Órdenes.Max(m => m.Key.OrderID) + 1;
            }
            devolver identidad;
        }

        objeto público GetNextDetailID(objeto mainID)
        {
            int id = 1;
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)mainID);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                ítem var = dic.First();
                Lista de var = ítem. Value.Where(w => w.DetailID == (int)mainID);
                Si (lista. Count<OrderDetail>() > 0)
                {
                    id = lista. First(). DetailID + 1;
                }
            }
            devolver identidad;
        }

        Objeto público Guardar (entidad de orden,<OrderDetail> detalle IList)
        {
            object result = null;
            si (! OrdenStock.Órdenes.ContieneClave(entidad))
            {
                OrderStock.Orders.Add(entidad, detalle);
                resultado = entidad. OrderID;
            }
            resultado de retorno;
        }

        Public void Update(KeyValuePair<<OrderDetail>Order, IList> entidad)
        {
            si (OrderStock.Orders.ContainsKey(entity. Clave))
            {
                OrderStock.Orders[entity. Clave] = entidad. Valor;
            }
        }

        Public KeyValuePair<Order, IList<OrderDetail>> Get(id de objeto)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> entity = new KeyValuePair<Order, <OrderDetail>IList>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                entidad = dic.First();
            }
            
            entidad de retorno;
        }

        empty public void Suprimir (KeyValuePair<Order, <OrderDetail>IList> entidad)
        {
            si (OrderStock.Orders.ContainsKey(entity. Clave))
            {
                OrderStock.Orders.Remove(entity. Clave);
            }
        }
    }
}



Prueba

usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando NUnit.Framework;
usando Service;
usando Domain;

ServiceTest en espacio de nombres
{
    [TestFixture]
    Clase pública OrderServiceTest
    {
        m_service privados de Servicio Internacional;

        [Preparación]
        vacío público Init()
        {
            m_service = nuevo OrderService();
        }

        [Prueba]
        vacío público LoadAllTest()
        {
           var list= m_service. LoadAll();
           Foreach (elemento var en la lista)
           {
               Consola.WriteLine(ítem. OrderID);
               Consola.WriteLine(ítem. DirecciónOrden);
               Consola.WriteLine(ítem. OrderDate);
               Consola.WriteLine(ítem. OrderTel);
           }
           Assert.IsNotNull(lista);
        }

        [Prueba]
        vacío público Guardar()
        {
            Entidad de orden = nuevo Orden()
            {
                OrderID = (int)m_service. GetNextID(),
                OrdenFecha = FechaTiempo.Ahora.AgregarDías(-1),
                DirecciónDeOrden = "Urumqi",
                OrderTel = "123123"
            };
            objeto obj = m_service. Save(entidad);
           
            Assert.IsNotNull(obj);
        }

        [Prueba]
        Vacío público Actualización()
        {
            entidad de orden = m_service. Get(1);
            entidad. DirecciónOrdenT= "Korla";
            m_service. Actualización(entidad);
        }

        [Prueba]
        Vacío público Eliminar()
        {
            entidad de orden = m_service. Get(1);
            entidad. DirecciónOrdenT= "Korla";
            m_service. Eliminar(entidad);
        }
    }
}



usando Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando NUnit.Framework;
usando Service;
usando Domain;

ServiceTest en espacio de nombres
{
    [TestFixture]
    Clase pública OrderServiceDetailTest
    {
        privado IOrderDetailService m_service;

        [Preparación]
        vacío público Init()
        {
            m_service = nuevo OrderDetailService();
        }

        [Prueba]
        vacío público LoadAllTest()
        {
           var list= m_service. LoadAll();
           Foreach (elemento var en la lista)
           {
               Console.WriteLine("-------------- Order ----------");
               Consola.WriteLine(ítem. Key.OrderID);
               Consola.WriteLine(ítem. Key.OrderAdress);
               Consola.WriteLine(ítem. Key.OrderDate);
               Consola.WriteLine(ítem. Key.OrderTel);
               Console.WriteLine("-------------- Detalle de Orden ----------");
               Foreach (var li en ítem. Valor)
               {
                   Consola.WriteLine(li.DetailID);
                   Console.WriteLine(li.Price);
                   Consola.WriteLine(li.Quantity);
                   Consola.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(lista);
        }

        [Prueba]
        vacío público Guardar()
        {
            int id = (int)m_service. GetNextID();
            Entidad de orden = nuevo Orden()
            {
                OrderID = id,
                OrdenFecha = FechaTiempo.Ahora.AgregarDías(-1),
                DirecciónDeOrden = "Urumqi",
                OrderTel = "123123"
            };
            <OrderDetail> IList list = nueva lista<OrderDetail>();
            para (int i = 0; Yo < 3; i++)
            {
                lista. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Precio=10+i,
                    Cantidad=i+100,
                    ProductID = 1000 + i
                });
            }
            objeto obj = m_service. Guardar (entidad, lista);
           
            Assert.IsNotNull(obj);
        }

        [Prueba]
        Vacío público Actualización()
        {
            Entidad var = m_service. Get(1);

            entidad. Value[0] = nuevo OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Precio = 13,34M,
                Cantidad = 200,1M
            };
            m_service. Actualización(entidad);
        }

        [Prueba]
        Vacío público Eliminar()
        {
            Entidad var = m_service. Get(1);
            m_service. Eliminar(entidad);
        }
    }
}



Nota: Necesitas consultar la herramienta nunit.framework al hacer pruebas




Anterior:Comparte dos herramientas de ataque CC, buenas para pruebas de estrés
Próximo:Bi Fujian emitió una carta de disculpa en Weibo: Me siento muy culpable y triste
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com