Ir para o conteúdo do rodapé
Iron Academy Logo
Aprenda C#
Aprenda C#

Outras categorias

Operador condicional nulo em C#

Em um de seus vídeos, Gerald Versluis se deparou com uma questão sobre o ponto de interrogação (?) em seu código de exemplo. Isso o levou a criar um vídeo detalhado explicando o operador condicional nulo em C# . Se você já se perguntou o que ?. ou ?[ ] faz em C#, o vídeo de Gerald é um ótimo recurso para entendê-lo claramente. Vamos analisar a explicação dele passo a passo.

Explicação rápida através da página de documentos

Gerald começa por consultar a documentação oficial da Microsoft sobre operadores e expressões de acesso de membros. Ele destaca a seção sobre o operador condicional nulo, introduzido no C# 6. Na época da gravação, o C# 9 era a versão mais recente, com o C# 10 já em desenvolvimento.

Gerald explica que quando você usa a?.x ou a?[index], se a for nulo, toda a expressão resulta em nulo em vez de lançar uma NullReferenceException. Caso contrário, ele recupera o valor normalmente.

Embora a documentação seja útil, Gerald prefere exemplos práticos, então ele opta por um ambiente de programação interativo.

Exemplo através de .NET

Para demonstrar, Gerald muda for .NET, um ambiente C# interativo. Ele menciona que essa ferramenta funciona com Blazor, permitindo que os usuários executem código C# diretamente em um navegador.

Ele mostra brevemente o exemplo padrão da sequência de Fibonacci, que já vem pré-carregado no .NET, e depois o apaga para iniciar um novo exemplo com foco no operador condicional nulo.

Operadores condicionais nulos explicados

Gerald cria uma classe Pessoa simples com as seguintes propriedades:

public class Person
{
    // The Name property of the Person
    public string Name { get; set; }

    // A reference to another Person object representing the partner
    public Person Partner { get; set; }

    // An array representing the Person's hobbies
    public string[] Hobbies { get; set; }
}
public class Person
{
    // The Name property of the Person
    public string Name { get; set; }

    // A reference to another Person object representing the partner
    public Person Partner { get; set; }

    // An array representing the Person's hobbies
    public string[] Hobbies { get; set; }
}

Ele inicializa um objeto Person como nulo:

// Initialize a Person object as null
Person person = null;

// Attempting to access a property of a null object will throw a NullReferenceException
Console.WriteLine(person.Name);
// Initialize a Person object as null
Person person = null;

// Attempting to access a property of a null object will throw a NullReferenceException
Console.WriteLine(person.Name);

Executar este código lança uma NullReferenceException porque person é nulo. Para evitar isso, os desenvolvedores geralmente adicionam uma verificação de valor nulo antes de acessar as propriedades:

// Check if the person object is not null before accessing its properties
if (person != null)
{
    Console.WriteLine(person.Name);
}
// Check if the person object is not null before accessing its properties
if (person != null)
{
    Console.WriteLine(person.Name);
}

Embora funcione, isso introduz linhas de código adicionais. Gerald explica como o operador condicional nulo simplifica isso:

// Using the null-conditional operator to safely access the Name property
Console.WriteLine(person?.Name);
// Using the null-conditional operator to safely access the Name property
Console.WriteLine(person?.Name);

Agora, se person for nulo, a expressão simplesmente retorna nulo em vez de travar.

Operador condicional nulo em propriedades

Gerald expande o exemplo configurando um objeto Person:

// Create a new Person object
Person person = new Person { Name = "Gerald" };

// Access the Name property safely
Console.WriteLine(person?.Name);
// Create a new Person object
Person person = new Person { Name = "Gerald" };

// Access the Name property safely
Console.WriteLine(person?.Name);

Como person não é nulo, ele imprime corretamente "Gerald".

Em seguida, ele mostra um exemplo aninhado:

// Safely access the Name property of the Partner object
Console.WriteLine(person?.Partner?.Name);
// Safely access the Name property of the Partner object
Console.WriteLine(person?.Partner?.Name);

Se person.Partner for nulo, toda a expressão se avalia como nulo em vez de lançar uma exceção. Isso evita condições condicionais desnecessárias.

Encadeamento de operadores condicionais nulos

Gerald explica que os operadores condicionais nulos podem ser encadeados, tornando o código mais limpo ao lidar com objetos profundamente aninhados. Em vez de escrever várias verificações de valores nulos, você pode usar:

// Chain null-conditional operators to safely access nested objects
Console.WriteLine(person?.Partner?.Name);
// Chain null-conditional operators to safely access nested objects
Console.WriteLine(person?.Partner?.Name);

Se person ou person.Partner for nulo, o resultado será nulo, prevenindo erros de execução.

Operadores condicionais nulos em matrizes

Gerald estende a discussão a matrizes e coleções . Ele adiciona um array de Hobbies à classe Person e mostra como acessar os elementos com segurança:

// Safely access the first element of the Hobbies array
Console.WriteLine(person?.Hobbies?[0]);
// Safely access the first element of the Hobbies array
Console.WriteLine(person?.Hobbies?[0]);

Aqui, se person ou Hobbies for nulo, a expressão se avalia como nulo em vez de causar uma exceção.

Conclusão

O vídeo de Gerald oferece uma análise detalhada do operador condicional nulo em C#. Ao usar ?. e ?[ ], os desenvolvedores podem escrever código mais limpo e seguro que evita NullReferenceException. Seja lidando com propriedades, objetos aninhados ou arrays, o operador condicional nulo torna o código mais conciso e legível.

Para uma demonstração completa, confira o vídeo de Gerald Versluis, onde ele explica tudo com exemplos práticos!

Hero Worlddot related to Operador condicional nulo em C#
Hero Affiliate related to Operador condicional nulo em C#

Ganhe mais compartilhando o que você ama.

Você cria conteúdo para desenvolvedores que trabalham com .NET, C#, Java, Python ou Node.js? Transforme sua expertise em renda extra!

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim