0Pricing
C# Academy · Lezione

Tipi di valore nullable

int? e la struct Nullable.

Tipi di valore nullable è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Perché usare tipi valore nullable?

I tipi valore come int, bool e DateTime contengono sempre un valore. Un int ha come valore predefinito 0 e non può rappresentare «nessun valore».

A volte è necessario rappresentare dati mancanti, ad esempio un campo di un sondaggio a cui non è stata data risposta o una colonna vuota di un database. I tipi valore nullable consentono a un tipo valore di contenere anche null.

Dichiarazione con int?

Aggiunga ? dopo un tipo valore per renderlo nullable. int? può contenere un qualsiasi intero oppure null.

È il modo più comune di scrivere i tipi valore nullable nel codice C# quotidiano.

int? age = null;
int count = 5;
age = count;
System.Console.WriteLine(age);

Nullable<T> dietro le quinte

La sintassi ? è una forma abbreviata. int? è esattamente lo stesso tipo di Nullable<int>.

Nullable<T> è una struct che avvolge un tipo valore e aggiunge un flag per tenere traccia della presenza di un valore.

Nullable<int> a = 10;
int? b = 10;
System.Console.WriteLine(a == b);

HasValue e Value

Ogni valore nullable espone due proprietà. HasValue è true quando è presente un valore, mentre Value restituisce il valore sottostante.

La lettura di Value quando HasValue è false genera un'InvalidOperationException, quindi esegua prima il controllo.

int? score = 42;
if (score.HasValue)
{
    System.Console.WriteLine(score.Value);
}

Un esempio completo

Ecco un programma completo. Assegna un valore, verifica HasValue e stampa il risultato.

Lo esegua per vedere come si comporta un valore nullable quando contiene effettivamente dei dati.

using System;

class Program
{
    static void Main()
    {
        int? temperature = 21;
        if (temperature.HasValue)
            Console.WriteLine("Temp: " + temperature.Value);
        else
            Console.WriteLine("No reading");
    }
}

Quando è null

L'assegnazione di null fa sì che HasValue restituisca false. Viene quindi eseguito il ramo else.

Questo schema consente di gestire in modo sicuro i valori opzionali senza causare arresti anomali.

using System;

class Program
{
    static void Main()
    {
        int? temperature = null;
        if (temperature.HasValue)
            Console.WriteLine(temperature.Value);
        else
            Console.WriteLine("No reading");
    }
}

GetValueOrDefault

GetValueOrDefault() restituisce il valore se presente, altrimenti il valore predefinito per quel tipo (ad esempio 0 per int).

È anche possibile specificare un valore alternativo: GetValueOrDefault(100) restituisce 100 quando il valore è null.

int? quantity = null;
int result = quantity.GetValueOrDefault(100);
System.Console.WriteLine(result);

Conversione implicita a nullable

Un int normale viene convertito automaticamente in int?, perché ogni valore normale è anche un valore nullable valido.

La conversione inversa non è automatica: per passare da int? a int è necessario un cast esplicito o un valore predefinito, perché il valore nullable potrebbe essere null.

int plain = 7;
int? wrapped = plain;
int back = (int)wrapped;
System.Console.WriteLine(back);

Tipi nullable con altri tipi di valore

È possibile usare qualsiasi tipo di valore: bool?, double?, DateTime? e persino struct personalizzate.

Un bool? ha tre stati: true, false e null, una caratteristica utile per le domande sì/no senza risposta.

bool? agreed = null;
double? price = 9.99;
System.Console.WriteLine(agreed.HasValue);
System.Console.WriteLine(price.Value);

I tipi riferimento sono già nullable

Le classi come string e gli array possono già avere valore null, quindi non hanno bisogno del wrapper Nullable<T>.

Il simbolo ? sui tipi riferimento (come string?) ha un significato diverso: è un'annotazione di riferimento nullable, non la struct Nullable<T>.

Confronto tra valori nullable

I confronti funzionano, ma ricordi che null si comporta in modo speciale. Due valori null sono uguali e qualsiasi confronto ordinato che coinvolga null restituisce false.

Quindi null < 5 è false e anche null > 5 è false.

int? x = null;
System.Console.WriteLine(x < 5);
System.Console.WriteLine(x == null);

Verifica rapida

Verifichi la Sua comprensione dei tipi di valore nullable.

Riepilogo

I tipi di valore nullable consentono anche ai tipi di valore di contenere null. Si scrivono come int?, che equivale a Nullable<int>.

Usi HasValue per verificare la presenza di un valore, Value per leggerlo (solo quando è presente) e GetValueOrDefault() per ottenere un valore predefinito sicuro. I tipi riferimento sono già nullable.

Domande Frequenti

La lezione «Tipi di valore nullable» è gratuita?

Sì — il testo completo di «Tipi di valore nullable» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Tipi di valore nullable»?

int? e la struct Nullable. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Tipi di valore nullable»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Tipi di valore nullable
  2. Operatore null-conditional
  3. Operatori null-coalescing
  4. Proteggersi dai null
← Torna a C# Academy