Objeto e coleção inicializadores (guia de programação do C#)

Inicializadores de objeto permitem que você atribuir valores a todos os campos ou propriedades acessíveis de um objeto em tempo de design sem ter que explicitamente chamar um construtor.O exemplo a seguir mostra como usar um inicializador de objeto com um tipo nomeado, Cat.Observe o uso de propriedades autoimplementadas na classe de Cat .Para obter mais informações, consulte Auto-implementado propriedades (guia de programação do C#).

class Cat
{
    // Auto-implemented properties.
    public int Age { get; set; }
    public string Name { get; set; }
}
Cat cat = new Cat { Age = 10, Name = "Fluffy" };

Inicializadores de objeto com tipos anônimos

Embora inicializadores de objeto podem ser usados em qualquer contexto, são especialmente úteis em expressões de consulta de LINQ .Expressões de consulta tornam o uso frequente de tipos anônimos, que só pode ser inicializado usando um inicializador de objeto, conforme mostrado na seguinte declaração.

var pet = new { Age = 10, Name = "Fluffy" };

Tipos anônimos permitem a cláusula de select em uma expressão de consulta de LINQ para transformar objetos de sequência original em objetos cujo valor e a forma pode diferir de original.Isso é útil se você desejar armazenar apenas uma parte das informações de cada objeto em uma sequência.No exemplo, suponha que um objeto do produto ()pcontém vários campos e métodos, e que você está apenas interessado em criar uma sequência de objetos que contém o nome do produto e o preço unitário.

var productInfos =
    from p in products
    select new { p.ProductName, p.UnitPrice };

Quando esta consulta é executada, a variável de productInfos conterá uma sequência de objetos que podem ser acessados em uma instrução de foreach conforme mostrado neste exemplo:

foreach(var p in productInfos){...}

Cada objeto no novo tipo anônimo tem duas propriedades públicas que recebem os mesmos nomes que as propriedades ou os campos no objeto original.Você também pode renomear um campo quando você estiver criando um tipo anônimo; o exemplo renomeia o campo de UnitPrice a Price.

select new {p.ProductName, Price = p.UnitPrice};

Inicializadores de objeto com tipos anuláveis

É um erro em tempo de compilação para usar um inicializador de objeto com uma estrutura anulável.

Inicializadores de coleção

Inicializadores de coleção permitem que você especifique um ou mais inicializadores do elemento quando você inicializa uma classe de coleção que implementa IEnumerable.Inicializadores de elemento pode ser um valor simples, uma expressão ou um inicializador de objeto.Usando um inicializador de coleção você não precisa especificar várias chamadas para o método de Add da classe em seu código-fonte; o compilador adiciona chamadas.

Os exemplos a seguir mostram dois inicializadores de coleção simples:

List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() };

Os seguintes inicializadores de objeto usos de inicializador de coleção para inicializar objetos da classe de Cat definida em um exemplo anterior.Observe que inicializadores de objeto individuais são colocados entre chaves e separados por vírgulas.

List<Cat> cats = new List<Cat>
{
    new Cat(){ Name = "Sylvester", Age=8 },
    new Cat(){ Name = "Whiskers", Age=2 },
    new Cat(){ Name = "Sasha", Age=14 }
};

Você pode especificar nulo como um elemento em um inicializador de coleção se o método de Add de coleção permite.

List<Cat> moreCats = new List<Cat>
{
    new Cat(){ Name = "Furrytail", Age=5 },
    new Cat(){ Name = "Peaches", Age=4 },
    null
};

Exemplo

// The following code consolidates examples from the topic.
class ObjInitializers
{
    class Cat
    {
        // Auto-implemented properties.
        public int Age { get; set; }
        public string Name { get; set; }
    }

    static void Main()
    {
        Cat cat = new Cat { Age = 10, Name = "Fluffy" };

        List<Cat> cats = new List<Cat>
        {
            new Cat(){ Name = "Sylvester", Age=8 },
            new Cat(){ Name = "Whiskers", Age=2 },
            new Cat(){ Name = "Sasha", Age=14 }
        };

        List<Cat> moreCats = new List<Cat>
        {
            new Cat(){ Name = "Furrytail", Age=5 },
            new Cat(){ Name = "Peaches", Age=4 },
            null
        };

        // Display results.
        System.Console.WriteLine(cat.Name);

        foreach (Cat c in cats)
            System.Console.WriteLine(c.Name);

        foreach (Cat c in moreCats)
            if (c != null)
                System.Console.WriteLine(c.Name);
            else
                System.Console.WriteLine("List element has null value.");
    }
    // Output:
    //Fluffy
    //Sylvester
    //Whiskers
    //Sasha
    //Furrytail
    //Peaches
    //List element has null value.
}

Consulte também

Referência

Tipos anônimos (guia de programação do C#)

Conceitos

Guia de programação do C#

Expressões de consulta do LINQ (guia de programação do C#)