0Pricing
C# Academy · Lección

Materialización (ToList, ToDictionary) y notas de rendimiento

Convierta consultas diferidas en colecciones concretas con ToList/ToArray/ToDictionary; evite enumeraciones repetidas y conozca las reglas de unicidad de las claves.

Materialización (ToList, ToDictionary) y notas de rendimiento es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.

Por qué materializar

Las consultas diferidas se ejecutan cada vez que se enumeran.

  • Materialice para tomar una instantánea
  • Evite volver a ejecutar varias veces consultas costosas
  • Elija List, Array o Dictionary según la tarea

ToList / ToArray

ToList/ToArray ejecutan la consulta una vez y almacenan los resultados; los cambios posteriores en el origen no se reflejan.

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
  }
}

Conceptos básicos de ToDictionary

ToDictionary materializa la secuencia en un Dictionary<K,V>. Las claves deben ser únicas; de lo contrario, se produce una excepción.

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
  }
}

Duplicados: ToLookup/GroupBy

Cuando las claves pueden repetirse, prefiera ToLookup (diccionario de varios valores) o GroupBy en lugar de 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);
    }
  }
}

Evitar enumeraciones múltiples

Cada enumeración puede volver a ejecutar el trabajo. Materialice una vez (por ejemplo, con ToList) cuando vaya a iterar varias veces.

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
  }
}

Lista de comprobación de la materialización

Lista de comprobación:

  • Utilice ToList/ToArray para tomar una instantánea.
  • Utilice ToDictionary cuando las claves sean únicas; en caso contrario, ToLookup/GroupBy.
  • Evite las enumeraciones múltiples de orígenes costosos; almacene el resultado una sola vez.
  • Materialice cerca de los límites (E/S, llamadas a la base de datos) para obtener un comportamiento predecible.

Requisito de ToDictionary

Comprobación rápida: ¿qué debe cumplirse al utilizar ToDictionary(keySelector) sobre una secuencia?

Resumen

Resumen: materialice con ToList/ToArray para tomar instantáneas, utilice ToDictionary para realizar búsquedas rápidas (con claves únicas) y almacene el resultado para evitar volver a ejecutar consultas costosas.

Preguntas frecuentes

¿La lección «Materialización (ToList, ToDictionary) y notas de rendimiento» es gratis?

Sí — el texto completo de «Materialización (ToList, ToDictionary) y notas de rendimiento» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.

¿Qué aprenderé en «Materialización (ToList, ToDictionary) y notas de rendimiento»?

Convierta consultas diferidas en colecciones concretas con ToList/ToArray/ToDictionary; evite enumeraciones repetidas y conozca las reglas de unicidad de las claves. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.

¿Cuánto tiempo toma la lección «Materialización (ToList, ToDictionary) y notas de rendimiento»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. GroupBy, Join, Aggregate y proyecciones (tipos anónimos)
  2. Materialización (ToList, ToDictionary) y notas de rendimiento
  3. Consejos de composabilidad
← Volver a C# Academy