C# Academy · Lezione

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.

Lezione 3 di 38 passaggi

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

Verifica rapida: in C# 6 (senza tipi riferimento nullable), qual è una buona pratica per ridurre i bug legati ai valori null nelle API pubbliche?

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.

Gratis per iniziare

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

  1. Metodi/tipi generici e vincoli
  2. Varianza (in/out) con interfacce e delegate
  3. Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)
← Torna a C# Academy