Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 22445|Resposta: 0

[Fonte] O uso de classes genéricas de coleção (Ilist, IDictionary) em C#

[Copiar link]
Publicado em 10/04/2015 17:22:50 | | |

IDictionary é a interface base para uma coleção genérica de pares chave/valor, cada um dos quais é um par-chave-valor no objeto keyValuePair.

Cada par deve ter uma chave única. A implementação difere quanto a permitir ou não que a chave seja uma referência vazia (Nothing in Visual Basic). Esse valor pode ser uma referência vazia (Nada no Visual Basic) e não precisa ser único. A interface IDictionary permite uma enumeração das chaves e valores que contém, mas isso não implica nenhuma ordem de ordenação específica.

A instrução foreach na linguagem C# (For Each em Visual Basic e para each em C++) requer o tipo de cada elemento na coleção. Como cada elemento do IDictionary é um par chave/valor, o tipo de elemento não é nem um tipo de chave nem um tipo de valor. Em vez disso, é um tipo KeyValuePair.



Aqui está um exemplo simples de programa



Classe de entidade:

Domínio do namespace
{

//订单
    Ordem de classe pública
    {
        public int OrderID { get; set; }

        /// <summary>
        Data do pedido
        /// </summary>
        Public DateTime OrderDate { get; set; }

        /// <summary>
        Endereço da ordem
        /// </summary>
        string pública OrderAdress { get; set; }

        /// <summary>
        Telefone para encomendar
        /// </summary>
        string pública OrderTel { get; set; }
    }
}



//订单明细


Domínio do namespace
{
    Classe pública OrderDetail
    {
        public int DetailID { get; set; }

        public int ProductID { get; set; }

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

        /// <summary>
        Preço unitário
        /// </summary>
        decimal público Price { get; set; }
    }
}



//存放数据

usando o Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domínio;

Serviço de espaço nominal
{
    classe pública estática OrderStock
    {
        private static<Order> IList m_orderList = nova List<Order>(); Defina um campo genérico para uma Lista

        IList público<Order> estático OrderList// define uma propriedade genérica de uma Lista
        {
            Obter
            {
                retorno m_orderList;
            }
            Conjunto
            {
                m_orderList = valor;
            }
        }

        IDictionary<Order, IList<OrderDetail>> m_orders = novo Dicionário<Ordem, IList<OrderDetail>>();

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

        IDictionary<Order, IList<OrderDetail>> Orders/ estático público define uma propriedade genérica de um dicionário
        {
            Obter
            {
                retorno m_orders;
            }
            Conjunto
            {
                m_orders = valor;
            }
        }
    }
}



Interfaces de serviço

usando o Sistema;
usando Domínio;
Serviço de espaço nominal
{
    interface pública IOrderService
    {

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

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

//保存
        objeto Save(entidade Domain.Ordem);

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

  Consulta por ID
        Order Get(id de objeto);

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



Serviço de espaço nominal
{
    interface pública IOrderDetailService
    {
        void Delete(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entidade);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(id de objeto);
        objeto GetNextDetailID(objeto mainID);
        objeto GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll();
        objeto Save(entidade Domain.Ordem, System.Collections.Generic.IList<Domínio.DetalheDeorde> detalhe);
        atualização void (System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entidade);
    }
}



Realização do serviço

usando o Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domínio;

Serviço de espaço nominal
{
    Serviço de Ordem de Classe Pública: Serviço Superior
    {
        IList público<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            lista de retorno;
        }

        objeto público GetNextID()
        {
            int id = 1;
            if (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            devolver ID;
        }

        objeto público Salvar (entidade de ordem)
        {
            OrderStock.OrderList.Add(entidade);

            Devolver a entidade. OrderID;
        }

        Atualização de vazio público (entidade de ordem)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);

            se (lista. <Order>Contagem() > 0)
            {
                Ordem de ordem = lista. Primeiro();
                OrdemEstoque.ListaDeOrdem[OrdemEstoque.ListaDePedidoÍndiceOf(ordem)] = entidade;
            }
        }

        ordem pública Get (objeto id)
        {
            Entidade de ordem = nula;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            se (lista. <Order>Contagem() > 0)
            {
                Ordem de ordem = lista. Primeiro();
                entidade = OrdemEstoque.ListaDeOrdem[OrdemEstoque.ListaDeOrdemÍndiceOf(ordem)];
            }
            retornar a entidade;
        }

        Exclusão pública (entidade de ordem)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);
            se (lista. <Order>Contagem() > 0)
            {
                Ordem de ordem = lista. Primeiro();
                OrderStock.OrderList.Remove(order);
            }
        }
    }
}





usando o Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando Domínio;

Serviço de espaço nominal
{
    classe pública OrderDetailService: IOrderDetailService
    {
        Identificação pública<Ordem, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            devolver a dic;
        }

        objeto público GetNextID()
        {
            int id = 1;
            se (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            devolver ID;
        }

        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)
            {
                item var = dic.First();
                Lista VAR = item. Value.Where(w => w.DetailID == (int)mainID);
                se (lista. <OrderDetail>Contagem() > 0)
                {
                    id = lista. First(). DetailID + 1;
                }
            }
            devolver ID;
        }

        objeto público Salvar (entidade de ordem, detalhe IList<OrderDetail>)
        {
            resultado do objeto = nulo;
            se (! OrdemStock.Ordens.Contém-Chave(entidade))
            {
                OrderStock.Orders.Add(entidade, detalhe);
                resultado = entidade. OrderID;
            }
            resultado do retorno;
        }

        public void Update(KeyValuePair<Order, <OrderDetail>IList> entidade)
        {
            se (OrderStock.Orders.ContainsKey(entity. Chave))
            {
                OrderStock.Orders[entity. Chave] = entidade. Valor;
            }
        }

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

        empty público Delete(KeyValuePair<Order, <OrderDetail>IList> entidade)
        {
            se (OrderStock.Orders.ContainsKey(entity. Chave))
            {
                OrderStock.Orders.Remove(entity. Chave);
            }
        }
    }
}



Teste

usando o Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando o NUnit.Framework;
usando o Serviço;
usando Domínio;

Espaço de nomes ServiceTest
{
    [TestFixture]
    classe pública OrderServiceTest
    {
        m_service privados de serviço internacional;

        [Preparação]
        Init() de vazio público
        {
            m_service = novo OrderService();
        }

        [Teste]
        LoadAllTest() público vazio
        {
           var list= m_service. LoadAll();
           Foreach (item var na lista)
           {
               Console.WriteLine(item. OrderID);
               Console.WriteLine(item. OrderAdress);
               Console.WriteLine(item. OrderDate);
               Console.WriteLine(item. OrderTel);
           }
           Assert.IsNotNull(lista);
        }

        [Teste]
        Void público Salvar()
        {
            Entidade de ordem = nova Ordem()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                EndereçoOrdem = "Urumqi",
                OrderTel = "123123"
            };
            objeto obj = m_service. Save(entidade);
           
            Assert.IsNotNull(obj);
        }

        [Teste]
        Atualização de vazio-público ()
        {
            Entidade de ordem = m_service. Get(1);
            entidade. EndereçoOrderT= "Korla";
            m_service. Atualização(entidade);
        }

        [Teste]
        Void público Delete()
        {
            Entidade de ordem = m_service. Get(1);
            entidade. EndereçoOrderT= "Korla";
            m_service. Excluir(entidade);
        }
    }
}



usando o Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Text;
usando o NUnit.Framework;
usando o Serviço;
usando Domínio;

Espaço de nomes ServiceTest
{
    [TestFixture]
    classe pública OrderServiceDetailTest
    {
        privado IOrderDetailService m_service;

        [Preparação]
        Init() de vazio público
        {
            m_service = novo OrderDetailService();
        }

        [Teste]
        LoadAllTest() público vazio
        {
           var list= m_service. LoadAll();
           Foreach (item var na lista)
           {
               Console.WriteLine("-------------- Order ----------");
               Console.WriteLine(item. Key.OrderID);
               Console.WriteLine(item. Chave.OrdemEndereço);
               Console.WriteLine(item. Key.OrderDate);
               Console.WriteLine(item. Key.OrderTel);
               Console.WriteLine("-------------- Detalhe de Ordem ----------");
               Foreach (var li no item. Valor)
               {
                   Console.WriteLine(li.DetailID);
                   Console.WriteLine(li.Price);
                   Console.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(lista);
        }

        [Teste]
        Void público Salvar()
        {
            int id = (int)m_service. GetNextID();
            Entidade de ordem = nova Ordem()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                EndereçoOrdem = "Urumqi",
                OrderTel = "123123"
            };
            <OrderDetail> IList list = nova Lista<OrderDetail>();
            para (int i = 0; Eu < 3; i++)
            {
                lista. Add(new OrderDetail() {
                    DetailID = i + 1,
                    Preço=10+i,
                    Quantidade=i+100,
                    ProductID = 1000 + i
                });
            }
            objeto obj = m_service. Save(entidade, lista);
           
            Assert.IsNotNull(obj);
        }

        [Teste]
        Atualização de vazio-público ()
        {
            entidade var = m_service. Get(1);

            entidade. Value[0] = novo OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                Preço = 13,34M,
                Quantidade = 200,1M
            };
            m_service. Atualização(entidade);
        }

        [Teste]
        Void público Delete()
        {
            entidade var = m_service. Get(1);
            m_service. Excluir(entidade);
        }
    }
}



Nota: Você precisa consultar a ferramenta nunit.framework ao testar




Anterior:Compartilhe duas ferramentas de ataque de CC, boas para testes de estresse
Próximo:Bi Fujian emitiu uma carta de desculpas no Weibo: Me sinto muito culpado e triste
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com