Curso de C#: Lição 20: Generic Collections

Esta lição irá apresentá-lo aos genéricos coleções e como eles podem ser usados. Aqui estão os objectivos para esta lição: Entenda como você pode se beneficiar coleções genéricas, Saiba como criar e utilizar um genérico List, escrever código que implementa um genérico Dictionary

Por | @oficinadanet Programação
Todo o caminho de volta na Aula 02, você aprendeu sobre matrizes e como eles permitem adicionar e recuperar uma coleção de objetos. Array's são boas para muitas tarefas, mas C # v2.0 introduziu um novo recurso chamado genéricos. Dentre muitas vantagens, uma enorme vantagem é que genéricos nos permitem criar conjuntos que nos permitam fazer mais do que permitidos por uma matriz. Esta lição irá apresentá-lo aos genéricos coleções e como eles podem ser usados. Aqui estão os objectivos para esta lição:
  • Entenda como você pode se beneficiar coleções genéricas
  • Saiba como criar e utilizar um genérico List
  • Escrever código que implementa um genérico Dictionary


O que os Generics podem fazer?


Durante todo este tutorial, você aprendeu sobre tipos, construiu-se em (int, float, char) ou personalizado (Forma de Atendimento, Contabilidade). Em .NET v1.0 havia coleções, como a ArrayList para trabalhar com grupos de objetos. ArrayList é um pouco como uma matriz, salvo automaticamente ela poderia crescer e comodidade oferecida muitos métodos que não têm matrizes. O problema com ArrayList e todos os outros. NET v1.0 coleções é que elas funcionam no tipo objeto. Uma vez que todos os objetos decorrem do tipo de objeto, você pode atribuir qualquer coisa a um ArrayList. O problema com isto é que você comprometa o desempenho overhead converter objetos de valor e digite o tipo de objeto e de um único ArrayList acidentalmente poderia segurar diversos tipos, o que causaria uma difícil encontrar erros em tempo de execução porque você escreveu código para trabalhar com um tipo. Genérico coleções corrigir esses problemas.

A Generic Collection (tipo safe) é segura, o que significa que você pode colocar apenas um tipo de objeto dentro dele. Este tipo elimina inadequações no momento da execução. Outra vantagem do modelo de segurança é que o desempenho é melhor com o tipo de valor de objetos porque eles não incorrer em despesas gerais de serem convertidos para e do tipo de objeto. Com Generic Collection, você tem o melhor dos mundos porque são fortemente digitado, como arrays, e você tem a funcionalidade adicional, como ArrayList e outras coleções não-genéricos, sem a resolução dos problemas.

A próxima seção vai mostrar como usar um genérico Lista coleção.

Criação de Generic List Collections


O padrão de utilização de um genérico Lista coleção é semelhante a arrays. Você declara a Lista, preenchê-lo's membros, em seguida, o acesso a membros. Aqui está um código de exemplo de como usar uma Lista:

List myInts = new List();

myInts.Add(1);
myInts.Add(2);
myInts.Add(3);

for (int i = 0; i < myInts.Count; i++)
{
    Console.WriteLine("MyInts: {0}", myInts[ i ]);
}


A primeira coisa que deve notar é a coleção Lista genérico, que é designada por Lista de int. Se você olhou na documentação para esta classe, você ia achar que ela é definida como Lista , onde T pode ser qualquer tipo. Por exemplo, se você queria que a lista para trabalhar na seqüência do cliente ou de objetos, você pode defini-los Lista ou como Lista e eles só iria segurar ou corda Cliente objetos. No exemplo acima, apenas detém myInts tipo int.

Usando o método Add, você pode adicionar tantos int objetos para a coleção que você deseja. Isto é diferente de matrizes, que têm um tamanho fixo. Classe A Lista tem muitos mais métodos que pode utilizar, como a Contém, remover, e muito mais.

Existem duas partes do circuito para que você precisa saber sobre. Em primeiro lugar, a condição usa a propriedade Count do myInts. Essa é outra diferença entre colecções e arrays em um array que utiliza um comprimento de propriedade da mesma coisa. Em seguida, a maneira de ler a partir de uma posição específica na Lista recolha, myInts [ i ], é exatamente a mesma sintaxe que você usa com matrizes.

A próxima vez que você começar a usar uma única dimensão-matriz, considere utilizar uma Lista vez. Dito isto, deixe que o seu problema ea solução apto a utilizar o melhor instrumento para o trabalho. Ou seja, é comum a trabalhar com o byte [], em muitos lugares do. NET Framework.

Trabalhando com Dictionary Collections


Outra grande utilidade genérica coleção é o Dicionário, que trabalha com a chave / valor pares. Existe um não-genéricos coleção, chamada de Hashtable que faz a mesma coisa, exceto que ela opera no tipo objeto. No entanto, como explicado anteriormente nesta lição, que pretende evitar as coleções não-genéricos e utilizar os seus homólogos em vez genéricos. O cenário que vou usar para esse exemplo é que você tem uma lista de clientes que necessitam de trabalhar com você. Seria natural se manter a par destes clientes por meio de sua CódigoDoCliente. O Dictionary exemplo irá trabalhar com instâncias de Atendimento a seguinte classe:
public class Customer
{
public Customer(int id, string name)
{
ID = id;
Name = name;
}

private int m_id;

public int ID
{
get { return m_id; }
set { m_id = value; }
}

private string m_name;

public string Name
{
get { return m_name; }
set { m_name = value; }
}
}


O cliente tem uma classe acima construtor de tornar mais fácil para inicializar. Ele também expõe a sua situação através de propriedades públicas. Não é muito sofisticado, neste ponto, mas está tudo bem, porque o único objectivo é ajudá-lo a aprender como usar um dicionário coleção. O exemplo a seguir Dictionary preenche uma coleção com objetos do cliente e, em seguida, mostra-lhe como extrair entradas do Dictionary:
Dictionary customers = new Dictionary();

Customer cust1 = new Customer(1, "Cust 1");
Customer cust2 = new Customer(2, "Cust 2");
Customer cust3 = new Customer(3, "Cust 3");

customers.Add(cust1.ID, cust1);
customers.Add(cust2.ID, cust2);
customers.Add(cust3.ID, cust3);

foreach (KeyValuePair custKeyVal in customers)
{
Console.WriteLine(
"Customer ID: {0}, Name: {1}",
custKeyVal.Key,
custKeyVal.Value.Name);
}


Os clientes variável é declarada como um dicionário . Considerando que a declaração formal do Dictionary está Dictionary , o significado de clientes é a de que é um dicionário onde a chave é do tipo int eo valor é do tipo Cliente. Portanto, qualquer hora que você adicione uma entrada ao dicionário, você deve fornecer a chave, pois é também a chave que você irá usar para extrair um determinado cliente a partir do Dictionary.

Eu criei três Cliente objetos, dando a cada um ID e um nome. Vou usar o ID como a chave de todo o Cliente e quanto ao valor objeto. Você pode ver isso nas chamadas para Adicionar, onde custX.ID é adicionado como a principal (primeiro parâmetro) e os custX exemplo é adicionado como o valor (segundo parâmetro).

Extraindo informações de um dicionário é um pouco diferente. Iteração os clientes através de um dicionário com foreach loop, o tipo retornado é KeyValuePair , onde TKey é do tipo int e TValue tipo Cliente é porque esses são os tipos que os clientes Dicionário é definido com um.

Desde custKeyVal é tipo KeyValuePair Valor da chave e que tem propriedades para você ler a partir de. No nosso exemplo, irá deter custKeyVal.Key o ID da instância do cliente e custKeyVal.Value irá deter a totalidade do Cliente instância. Os parâmetros nos Console.WriteLine demonstrar esta afirmação por imprimir a ID, obtidos através da Chave propriedade, bem como o nome, obtidos através da propriedade Nome do Cliente exemplo, que é devolvido pela propriedade Value.

O Dicionário tipo é útil para aquelas situações em que você precisa para manter um registo de objectos através de algum elemento identificador único. Para sua conveniência, aqui está Listing 20-1, mostra como ambas as coleções Lista e Dicionário trabalho.

Listando 20-1. Introdução ao Uso Generic Collections com um Exemplo da Lista e Dicionário Genérico Coleções:
using System;
using System.Collections.Generic;

public class Customer
{
    public Customer(int id, string name)
    {
        ID = id;
        Name = name;
    }

    private int m_id;

    public int ID
    {
        get { return m_id; }
        set { m_id = value; }
    }

    private string m_name;

    public string Name
    {
        get { return m_name; }
        set { m_name = value; }
    }
}

class Program
{
    static void Main(string[] args)
    {
        List myInts = new List();

        myInts.Add(1);
        myInts.Add(2);
        myInts.Add(3);

        for (int i = 0; i < myInts.Count; i++)
        {
            Console.WriteLine("MyInts: {0}", myInts[ i ]);
        }

        Dictionary customers = new Dictionary();

        Customer cust1 = new Customer(1, "Cust 1");
        Customer cust2 = new Customer(2, "Cust 2");
        Customer cust3 = new Customer(3, "Cust 3");

        customers.Add(cust1.ID, cust1);
        customers.Add(cust2.ID, cust2);
        customers.Add(cust3.ID, cust3);

        foreach (KeyValuePair custKeyVal in customers)
        {
            Console.WriteLine(
                "Customer ID: {0}, Name: {1}",
                custKeyVal.Key,
                custKeyVal.Value.Name);
        }

        Console.ReadKey();
    }
}


Quando codificação com a colecções genéricos, utilizando System.Collections.Generic adicionar uma declaração para o seu arquivo, assim como na listagem 20-1.

Resumo


Generic collections dar-lhe o melhor dos mundos com o forte tipagem de matrizes de flexibilidade e de coleções não-genéricos. Há muitos mais genéricos também escolher a partir de colecções, como a pilha, fila, e SortedDictionary. Olhe no System.Collections.Generic nomes genéricos para outras colecções.

Texto automaticamente traduzido de: http://www.csharp-station.com/Tutorials/Lesson20.aspx

Mais sobre: curso_c_sharp, c#
Share Tweet
DESTAQUESRecomendadoMais compartilhados
Comentários
Continue lendo
    AINDA NÃO SE INSCREVEU?

    Vem ver os vídeos legais que
    estamos produzindo no Youtube.