Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

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 entender claramente. Vamos analisar a explicação dele passo a passo.
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, a expressão inteira se avalia como nula ao invés 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.
Para demonstrar, Gerald muda para .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.
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 Property Name As String
' A reference to another Person object representing the partner
Public Property Partner As Person
' An array representing the Person's hobbies
Public Property Hobbies As String()
End ClassEle 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 Nothing
Dim person As Person = Nothing
' Attempting to access a property of a Nothing 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 IsNot Nothing Then
Console.WriteLine(person.Name)
End IfEmbora 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 ao invés de travar.
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
Dim person As New Person With {.Name = "Gerald"}
' Access the Name property safely
Console.WriteLine(person?.Name)Como person não é nulo, 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, a expressão inteira se avalia como nulo ao invés de lançar uma exceção. Isso evita condições condicionais desnecessárias.
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 em tempo de execução.
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(If(person?.Hobbies?.ElementAtOrDefault(0), Nothing))Aqui, se person ou Hobbies for nulo, a expressão se avalia como nulo ao invés de causar uma exceção.
O vídeo de Gerald oferece uma análise detalhada do operador condicional nulo em C#. Usando ?. e ?[ ], os desenvolvedores podem escrever um código mais limpo e seguro que evita a 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!
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy