0Pricing
C# Academy · Aula

Operador condicional de nulo

Acesso seguro com ?..

Operador condicional de nulo é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

O problema das cadeias nulas

Acessar um membro de uma referência null lança uma NullReferenceException. Essa é uma das falhas mais comuns em tempo de execução no C#.

Ao encadear chamadas como user.Address.City, qualquer elo da cadeia pode ser nulo, e a solução antiga era uma sequência enorme de verificações com if.

Conheça o ?.

O operador condicional nulo ?. interrompe a avaliação de toda a expressão. Se o lado esquerdo for null, o resultado será null em vez de uma exceção.

Ele pode ser entendido assim: "acesse este membro, mas somente se o objeto não for nulo".

string name = null;
int? length = name?.Length;
System.Console.WriteLine(length == null);

O resultado se torna anulável

Como ?. pode produzir null, o tipo do resultado se torna anulável. name?.Length é int?, não int.

Por isso, você deve armazená-lo em um int?, e não em um int simples.

string text = "hello";
int? len = text?.Length;
System.Console.WriteLine(len);

Um exemplo executável

Este programa mostra ?. retornando um valor quando o objeto existe e null quando ele não existe.

Execute-o e observe que nenhuma exceção é lançada.

using System;

class Program
{
    static void Main()
    {
        string a = "world";
        string b = null;
        Console.WriteLine(a?.ToUpper());
        Console.WriteLine(b?.ToUpper() ?? "(null)");
    }
}

Encadeando vários ?.

Você pode encadear ?. em vários membros. Assim que qualquer parte for null, toda a cadeia é interrompida e retorna null.

Portanto, customer?.Order?.Total é seguro mesmo que customer ou Order seja nulo.

string s = null;
int? upperLen = s?.ToUpper()?.Length;
System.Console.WriteLine(upperLen == null);

Indexador condicional de nulo ?[]

Existe uma forma de indexador, ?[], para matrizes e listas. Se a coleção for null, o acesso pelo índice retorna null em vez de causar uma falha.

Observação: ele protege contra uma coleção nula, mas não contra um índice fora dos limites.

int[] data = null;
int? first = data?[0];
System.Console.WriteLine(first == null);

Chamando métodos com segurança

?. também protege chamadas de métodos. list?.Clear() chama Clear somente se list não for nulo; caso contrário, não faz nada.

Para um método que retorna void, toda a instrução simplesmente não faz nada quando o valor é nulo.

System.Collections.Generic.List<int> list = null;
list?.Add(5);
System.Console.WriteLine("No crash");

Disparo de eventos seguro para execução concorrente

Um uso clássico é disparar eventos. SomeEvent?.Invoke(this, args) dispara o evento com segurança somente quando há pelo menos um manipulador inscrito.

Isso substituiu o antigo padrão de verificar se o valor era nulo, que poderia apresentar uma condição de corrida entre a verificação e a chamada.

System.Action handler = null;
handler?.Invoke();
System.Console.WriteLine("Invoked safely");

Combinando com ??

?. combina naturalmente com o operador de coalescência nula ?? para fornecer um valor alternativo quando a cadeia for nula.

name?.Length ?? 0 fornece o comprimento ou 0 se name for nulo.

string name = null;
int length = name?.Length ?? 0;
System.Console.WriteLine(length);

Uma armadilha sutil

Mesmo quando o tipo de valor final não é anulável, usar ?. torna a expressão anulável. list?.Count é int?, não int.

Se precisar de um int simples, acrescente ?? 0 ou use GetValueOrDefault().

var list = new System.Collections.Generic.List<int> { 1, 2 };
int count = list?.Count ?? 0;
System.Console.WriteLine(count);

Comparação completa

Este programa compara a abordagem detalhada com if à versão concisa com ?.. Ambas evitam a exceção, mas ?. é muito mais simples.

using System;

class Program
{
    static void Main()
    {
        string s = null;
        int len = s != null ? s.Length : -1;
        Console.WriteLine(len);
        Console.WriteLine(s?.Length ?? -1);
    }
}

Verificação rápida

Teste sua compreensão do operador condicional nulo.

Recapitulação

O operador condicional nulo ?. (e o indexador ?[]) interrompe o acesso a um membro quando o objeto é null, retornando null em vez de lançar uma exceção.

O resultado se torna anulável, portanto combine-o com ?? para fornecer um valor alternativo.

Perguntas Frequentes

A aula “Operador condicional de nulo” é grátis?

Sim — o texto completo de “Operador condicional de nulo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Operador condicional de nulo”?

Acesso seguro com ?.. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Operador condicional de nulo”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Tipos de valores anuláveis
  2. Operador condicional de nulo
  3. Operadores de coalescência de nulo
  4. Protegendo contra nulos
← Voltar para C# Academy