0Pricing
C# Academy · Aula

Propriedades HasValue e Value

Inspecione e acesse valores anuláveis com segurança.

Propriedades HasValue e Value é 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.

Duas propriedades principais

Todo tipo anulável expõe HasValue (um bool) e Value (o valor subjacente). Essas são suas ferramentas para inspecioná-lo com segurança.

using System;

class Program {
    static void Main() {
        int? n = 5;
        Console.WriteLine(n.HasValue);
        Console.WriteLine(n.Value);
    }
}

HasValue verifica a presença

HasValue é true quando há um valor real presente e false quando o valor é nulo.

using System;

class Program {
    static void Main() {
        int? a = 10;
        int? b = null;
        Console.WriteLine(a.HasValue);
        Console.WriteLine(b.HasValue);
    }
}

Lendo Value com segurança

Verifique sempre HasValue antes de ler Value, pois ler Value quando o valor é nulo gera uma exceção.

using System;

class Program {
    static void Main() {
        int? n = 42;
        if (n.HasValue) {
            Console.WriteLine(n.Value * 2);
        }
    }
}

Acessar o valor nulo gera uma exceção

Se você ler Value quando o anulável for nulo, C# gerará uma InvalidOperationException. A verificação protege você.

using System;

class Program {
    static void Main() {
        int? n = null;
        try {
            Console.WriteLine(n.Value);
        } catch (InvalidOperationException) {
            Console.WriteLine("Caught: no value");
        }
    }
}

GetValueOrDefault

GetValueOrDefault() retorna o valor quando ele está presente; caso contrário, retorna o padrão do tipo (0 para int, false para bool).

using System;

class Program {
    static void Main() {
        int? n = null;
        Console.WriteLine(n.GetValueOrDefault());
    }
}

GetValueOrDefault com valor alternativo

Passe um argumento para escolher seu próprio valor alternativo: GetValueOrDefault(99) retorna 99 quando o valor é nulo.

using System;

class Program {
    static void Main() {
        int? n = null;
        Console.WriteLine(n.GetValueOrDefault(99));
        int? m = 7;
        Console.WriteLine(m.GetValueOrDefault(99));
    }
}

Padrão: verificar e usar

Um padrão comum combina HasValue e Value em uma ramificação clara.

using System;

class Program {
    static void Describe(int? score) {
        if (score.HasValue)
            Console.WriteLine("Score is " + score.Value);
        else
            Console.WriteLine("No score yet");
    }
    static void Main() {
        Describe(88);
        Describe(null);
    }
}

Conversão implícita de volta

Você só pode atribuir um anulável a um tipo comum depois de confirmar que ele contém um valor; então, leia Value.

using System;

class Program {
    static void Main() {
        int? maybe = 15;
        if (maybe.HasValue) {
            int real = maybe.Value;
            Console.WriteLine(real + 5);
        }
    }
}

Valor padrão de um anulável

Um anulável que não foi definido explicitamente tem nulo como padrão, portanto HasValue é falso.

using System;

class Program {
    static void Main() {
        int? n = default;
        Console.WriteLine(n.HasValue);
    }
}

Usando em agregações

Percorra os dados, ignorando os valores nulos com HasValue, para calcular totais com segurança.

using System;

class Program {
    static void Main() {
        int?[] readings = { 10, null, 5, null, 8 };
        int sum = 0;
        foreach (var r in readings)
            if (r.HasValue) sum += r.Value;
        Console.WriteLine(sum);
    }
}

GetValueOrDefault em laços

GetValueOrDefault pode simplificar o código quando o valor nulo deve ser tratado como zero.

using System;

class Program {
    static void Main() {
        int?[] readings = { 10, null, 5 };
        int sum = 0;
        foreach (var r in readings)
            sum += r.GetValueOrDefault();
        Console.WriteLine(sum);
    }
}

Verificação rápida

Verifique seus conhecimentos sobre propriedades anuláveis.

Recapitulação

HasValue informa se um anulável contém um valor, e Value o recupera, mas ler Value quando o valor é nulo gera uma exceção.

GetValueOrDefault() retorna com segurança o valor ou um valor alternativo (o padrão do tipo ou um valor fornecido por você), sendo ideal para somas e leituras seguras.

Perguntas Frequentes

A aula “Propriedades HasValue e Value” é grátis?

Sim — o texto completo de “Propriedades HasValue e Value” é 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 “Propriedades HasValue e Value”?

Inspecione e acesse valores anuláveis com segurança. 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 “Propriedades HasValue e Value”?

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. Introdução aos tipos de valor anuláveis
  2. Propriedades HasValue e Value
  3. Operadores de coalescência nula
  4. Nullable em cálculos
← Voltar para C# Academy