Operatori null-coalescing
Valori predefiniti con ?? e ??=.
Operatori null-coalescing è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 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.
Fornire un valore predefinito
Spesso si desidera usare un valore se esiste oppure un valore predefinito se è null. L'operatore di coalescenza null ?? fa esattamente questo.
a ?? b significa: usa a se non è null, altrimenti usa b.
string input = null;
string name = input ?? "Guest";
System.Console.WriteLine(name);Come viene valutato ??
Il lato sinistro viene valutato per primo. Se non è null, il lato destro non viene valutato affatto.
Questa valutazione short-circuit fa sì che un valore predefinito costoso venga calcolato solo quando è effettivamente necessario.
string cached = "data";
string value = cached ?? Compute();
System.Console.WriteLine(value);
// Compute() is never called hereFunziona con i tipi di valore nullable
?? rimuove anche il wrapper dai tipi di valore nullable. La combinazione di int? maybe con ?? 0 produce un int normale non nullable.
È un modo chiaro per convertire int? in int usando un valore predefinito.
int? maybe = null;
int sure = maybe ?? 0;
System.Console.WriteLine(sure);Un esempio eseguibile
Questo programma legge un'impostazione che potrebbe essere null e usa un valore predefinito in alternativa. Lo esegua per vedere il valore predefinito in azione.
using System;
class Program
{
static void Main()
{
string theme = null;
string active = theme ?? "light";
Console.WriteLine("Theme: " + active);
}
}Concatenare ??
È possibile concatenare diversi valori predefiniti. L'espressione sceglie il primo valore non null procedendo da sinistra verso destra.
a ?? b ?? c prova a, poi b e infine c come ultima possibilità.
string a = null;
string b = null;
string c = "default";
System.Console.WriteLine(a ?? b ?? c);L'operatore ??=
L'assegnazione con coalescenza null ??= assegna il lato destro solo se il lato sinistro è attualmente null.
x ??= y è una forma abbreviata di if (x == null) x = y; e lascia x invariato quando contiene già un valore.
string config = null;
config ??= "default";
System.Console.WriteLine(config);
config ??= "ignored";
System.Console.WriteLine(config);Inizializzazione differita con ??=
Un uso comune di ??= è l'inizializzazione differita: creare un oggetto solo la prima volta che è necessario.
Nelle chiamate successive il campo è già impostato, quindi ??= non esegue alcuna operazione.
System.Collections.Generic.List<int> items = null;
items ??= new System.Collections.Generic.List<int>();
items.Add(1);
System.Console.WriteLine(items.Count);Combinare ?. e ??
La combinazione di ?. e ?? è estremamente comune. ?. evita l'eccezione e ?? fornisce un valore quando la catena restituisce null.
user?.Name ?? "Unknown" legge il nome in sicurezza, usando "Unknown" come valore predefinito.
string s = null;
int length = s?.Length ?? -1;
System.Console.WriteLine(length);?? in un programma completo
Qui ?. e ?? collaborano per stampare una lunghezza in sicurezza. Lo esegua con una stringa null per vedere il valore predefinito.
using System;
class Program
{
static void Main()
{
string username = null;
string display = username ?? "anonymous";
Console.WriteLine(display);
Console.WriteLine(username?.Length ?? 0);
}
}?? con eccezione in caso di null
Il lato destro di ?? può essere qualsiasi espressione, incluso throw. Questo rende ?? un modo conciso per interrompere subito l'esecuzione in presenza di un null imprevisto.
name ?? throw new ArgumentNullException(nameof(name)) restituisce il nome oppure genera un'eccezione se è null.
string Validate(string name) =>
name ?? throw new System.ArgumentNullException(nameof(name));Comportamento associativo a destra
?? è associativo a destra, quindi a ?? b ?? c viene raggruppato come a ?? (b ?? c).
In pratica significa comunque "vince il primo valore non null", ma è utile saperlo quando si ragiona su espressioni complesse.
int? a = null;
int? b = null;
int result = a ?? b ?? 99;
System.Console.WriteLine(result);Verifica rapida
Verifichi la Sua comprensione degli operatori di coalescenza null.
Riepilogo
?? restituisce il lato sinistro se non è null, altrimenti il lato destro, e può essere concatenato. ??= assegna un valore solo quando la destinazione è null, caratteristica ideale per l'inizializzazione differita.
Li combini con ?. per gestire i valori null in modo sicuro e conciso; può anche usare ?? throw per interrompere subito l'esecuzione.
Domande Frequenti
La lezione «Operatori null-coalescing» è gratuita?
Sì — il testo completo di «Operatori null-coalescing» è 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 «Operatori null-coalescing»?
Valori predefiniti con ?? e ??=. 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 3 di 4.
Quanto tempo richiede la lezione «Operatori null-coalescing»?
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
- Tipi di valore nullable
- Operatore null-conditional
- Operatori null-coalescing
- Proteggersi dai null