Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)
C# 6 non supporta i tipi di riferimento nullable (string?). Imparate a gestire null in modo sicuro: controlli sugli input, documentazione chiara, helper Require.NotNull e confronto con Nullable per i tipi valore.
Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6) è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 3. 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 3 lezioni in totale.
Consapevolezza degli NRT e alternativa
Idea: i tipi riferimento nullable (ad esempio string?) aggiungono controlli del compilatore nelle versioni più recenti di C#.
- C# 6 non supporta string?
- Utilizzi controlli, documentazione chiara e semplici helper
- Restituisca valori non null per impostazione predefinita
Protezione dai valori null
Aggiunga controlli con ArgumentNullException per i parametri di tipo riferimento; quindi consideri i valori come non null.
using System;
public static class Greeter
{
// Contract: name must not be null (C# 6 has no string? to enforce)
public static string Hello(string name)
{
if (name == null) throw new ArgumentNullException("name"); // guard
return "Hello " + name.ToUpper(); // safe after guard
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(Greeter.Hello("Ada"));
try
{
Console.WriteLine(Greeter.Hello(null)); // will throw (by design)
}
catch (Exception ex)
{
Console.WriteLine("Caught: " + ex.GetType().Name);
}
}
}
Helper Require.NotNull
Crei un piccolo helper Require.NotNull per ridurre il codice ripetitivo e rendere evidente l'intento.
using System;
public static class Require
{
// Works for reference types; returns the validated value
public static T NotNull<T>(T value, string name) where T : class
{
if (value == null) throw new ArgumentNullException(name);
return value;
}
}
public sealed class Email
{
public string Address { get; private set; }
public Email(string address)
{
Address = Require.NotNull(address, "address").Trim();
}
}
public class Program
{
public static void Main(string[] args)
{
Email e = new Email("user@mail.com");
Console.WriteLine(e.Address);
}
}
Nullable<T> e tipi riferimento
Nullable<T> (ad esempio int?) si utilizza per i tipi valore. I tipi riferimento possono già essere null; in C# 6 utilizziamo controlli.
using System;
public class Program
{
public static void Main(string[] args)
{
int x = 5; // value type (non-nullable)
int? maybe = null; // Nullable<T> works for value types
Console.WriteLine("x=" + x);
Console.WriteLine("maybe has value? " + maybe.HasValue);
Console.WriteLine("maybe or default: " + (maybe ?? -1));
}
}
Documentare i contratti dei valori null
Dichiari la nullabilità nella documentazione XML e sia coerente: restituisca sempre valori non null oppure documenti chiaramente quando null è possibile.
using System;
/// <summary>
/// Parses "key=value" and returns the value part.
/// Returns null if the format is invalid.
/// </summary>
public static class Parser
{
// Explicitly document when null can be returned.
public static string TryGetValue(string line)
{
if (line == null) throw new ArgumentNullException("line");
int idx = line.IndexOf("=");
if (idx < 0 || idx == line.Length - 1) return null; // documented nullable return
return line.Substring(idx + 1);
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(Parser.TryGetValue("a=1"));
Console.WriteLine(Parser.TryGetValue("oops")); // prints nothing (null)
}
}
Checklist di sicurezza rispetto ai valori null (C# 6)
Checklist:
- Protegga gli input con ArgumentNullException.
- Restituisca valori non null per impostazione predefinita; documenti gli eventuali valori restituiti nullable.
- Utilizzi piccoli helper (Require.NotNull) per mantenere ordinato il codice.
- Quando è ragionevole, preferisca overload che evitano i valori null (ad esempio una stringa vuota invece di null).
Sicurezza rispetto ai valori null in C# 6
Riepilogo
Riepilogo: gli NRT sono una funzionalità più recente. In C# 6, mantenga il codice sicuro con controlli, documentazione chiara, metodi helper e contratti prevedibili che restituiscano valori non null.
Impara C# con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 93
- Lezioni
- 346
Domande Frequenti
La lezione «Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)» è gratuita?
Sì — il testo completo di «Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)» è 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 3 lezioni in totale.
Cosa imparerò in «Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)»?
C# 6 non supporta i tipi di riferimento nullable (string?). Imparate a gestire null in modo sicuro: controlli sugli input, documentazione chiara, helper Require.NotNull e confronto con Nullable per i… 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 3.
Quanto tempo richiede la lezione «Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)»?
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
- Metodi/tipi generici e vincoli
- Varianza (in/out) con interfacce e delegate
- Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)