0Pricing
C# Academy · Lezione

Materializzazione (ToList, ToDictionary) e note sulle prestazioni

Trasformate le query differite in raccolte concrete con ToList/ToArray/ToDictionary; evitate enumerazioni ripetute e conoscete le regole di unicità delle chiavi.

Materializzazione (ToList, ToDictionary) e note sulle prestazioni è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Perché materializzare

Le query differite vengono eseguite ogni volta che le enumera.

  • Materializzi per creare un'istantanea
  • Eviti di rieseguire più volte query costose
  • Scelga List, Array o Dictionary in base alle necessità

ToList / ToArray

ToList/ToArray eseguono la query una volta e memorizzano i risultati; le modifiche successive alla sorgente non vengono riflesse.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    List<int> data = new List<int>(new int[] { 1, 2, 3, 4 });

    var evensQuery = data.Where(x => x % 2 == 0);
    int[] evensArray = evensQuery.ToArray(); // snapshot now
    List<int> evensList = evensQuery.ToList(); // snapshot now

    data.Add(6); // changes after materialization

    Console.WriteLine("Array:");
    foreach (int x in evensArray) Console.WriteLine(x); // 2,4
    Console.WriteLine("List:");
    foreach (int x in evensList) Console.WriteLine(x);  // 2,4
  }
}

Nozioni di base su ToDictionary

ToDictionary materializza in un Dictionary<K,V>. Le chiavi devono essere univoche, altrimenti viene generata un'eccezione.

using System;
using System.Collections.Generic;
using System.Linq;

public sealed class City
{
  public string Name;
  public int Population;
  public City(string name, int pop){ Name = name; Population = pop; }
}

public class Program
{
  public static void Main(string[] args)
  {
    var cities = new City[]
    {
      new City("Oslo", 634000),
      new City("Rome", 2873000),
      new City("Riga", 605000)
    };

    Dictionary<string, int> byName = cities
      .ToDictionary(c => c.Name, c => c.Population);

    Console.WriteLine(byName["Rome"]); // 2873000
  }
}

Duplicati: ToLookup/GroupBy

Quando le chiavi possono ripetersi, preferisca ToLookup (dizionario con più valori) o GroupBy invece di ToDictionary.

using System;
using System.Collections.Generic;
using System.Linq;

public sealed class Item { public string Category; public string Name; public Item(string c, string n){ Category=c; Name=n; } }

public class Program
{
  public static void Main(string[] args)
  {
    var items = new Item[]
    {
      new Item("Food","Apple"),
      new Item("Food","Bread"),
      new Item("Tool","Hammer"),
      new Item("Tool","Wrench")
    };

    // If keys may repeat, use ToLookup (multi-value) or GroupBy
    var lookup = items.ToLookup(i => i.Category, i => i.Name);

    foreach (var g in lookup)
    {
      Console.WriteLine(g.Key + ":");
      foreach (var name in g) Console.WriteLine(" - " + name);
    }
  }
}

Evitare enumerazioni multiple

Ogni enumerazione può rieseguire il lavoro. Materializzi una volta (ad esempio con ToList) quando deve iterare più volte.

using System;
using System.Collections.Generic;
using System.Linq;

public static class Expensive
{
  public static IEnumerable<int> Numbers()
  {
    // Simulate expensive enumeration (prints when enumerated)
    for (int i = 1; i <= 3; i++)
    {
      Console.WriteLine("Produce " + i);
      yield return i;
    }
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    var query = Expensive.Numbers().Select(x => x * x);

    Console.WriteLine("First pass:");
    foreach (int x in query) Console.WriteLine(x);

    Console.WriteLine("Second pass (re-enumerates work):");
    foreach (int x in query) Console.WriteLine(x);

    Console.WriteLine("Cache with ToList:");
    List<int> cached = query.ToList(); // runs once
    foreach (int x in cached) Console.WriteLine(x); // no extra production logs
  }
}

Checklist della materializzazione

Checklist:

  • Utilizzi ToList/ToArray per creare un'istantanea.
  • Utilizzi ToDictionary quando le chiavi sono univoche; altrimenti ToLookup/GroupBy.
  • Eviti l'enumerazione multipla di sorgenti costose; memorizzi i risultati una sola volta.
  • Materializzi vicino ai confini (I/O, chiamate al DB) per ottenere un comportamento prevedibile.

Requisito di ToDictionary

Controllo rapido: quale condizione deve essere soddisfatta quando si utilizza ToDictionary(keySelector) su una sequenza?

Riepilogo

Riepilogo: materializzi con ToList/ToArray per creare istantanee, con ToDictionary per ricerche rapide (chiavi univoche) e memorizzi i risultati per evitare di rieseguire query costose.

Domande Frequenti

La lezione «Materializzazione (ToList, ToDictionary) e note sulle prestazioni» è gratuita?

Sì — il testo completo di «Materializzazione (ToList, ToDictionary) e note sulle prestazioni» è 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 «Materializzazione (ToList, ToDictionary) e note sulle prestazioni»?

Trasformate le query differite in raccolte concrete con ToList/ToArray/ToDictionary; evitate enumerazioni ripetute e conoscete le regole di unicità delle chiavi. 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 2 di 3.

Quanto tempo richiede la lezione «Materializzazione (ToList, ToDictionary) e note sulle prestazioni»?

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. GroupBy, Join, Aggregate, proiezioni (tipi anonimi)
  2. Materializzazione (ToList, ToDictionary) e note sulle prestazioni
  3. Consigli sulla componibilità
← Torna a C# Academy