C# Academy · Lektion

Materialisering (ToList, ToDictionary) och prestandaanmärkningar

Omvandla uppskjutna frågor till konkreta samlingar med ToList/ToArray/ToDictionary; undvik upprepad uppräkning och lär dig reglerna för unika nycklar.

Lektion 2 av 38 steg

Materialisering (ToList, ToDictionary) och prestandaanmärkningar är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 2 av 3. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C# Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C# Academy innehåller totalt 3 lektioner.

Varför materialisera

Uppskjutna frågor körs varje gång du enumererar.

  • Materialisera för att ta en ögonblicksbild
  • Undvik att köra dyra frågor flera gånger
  • Välj List, Array eller Dictionary för uppgiften

ToList / ToArray

ToList/ToArray kör frågan en gång och lagrar resultaten; senare ändringar i källan återspeglas inte.

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

Grunderna i ToDictionary

ToDictionary materialiserar till en Dictionary<K,V>. Nycklarna måste vara unika, annars kastas ett undantag.

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

Dubbletter: ToLookup/GroupBy

När nycklar kan upprepas bör du föredra ToLookup (ordbok med flera värden) eller GroupBy i stället för 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);
    }
  }
}

Undvik flera enumereringar

Varje enumerering kan köra arbetet igen. Materialisera en gång (t.ex. med ToList) när du ska iterera flera gånger.

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

Checklista för materialisering

Checklista:

  • Använd ToList/ToArray för en ögonblicksbild.
  • Använd ToDictionary när nycklarna är unika; annars ToLookup/GroupBy.
  • Undvik flera enumereringar av dyra källor; cachelagra resultatet en gång.
  • Materialisera nära gränser (I/O, databasanrop) för förutsägbart beteende.

Krav för ToDictionary

Snabb kontroll: Vad måste gälla när du använder ToDictionary(keySelector) på en sekvens?

Sammanfattning

Sammanfattning: Materialisera med ToList/ToArray för ögonblicksbilder, använd ToDictionary för snabba uppslag (unika nycklar) och cachelagra för att undvika att dyra frågor körs igen.

Gratis att börja

Lär dig C# med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
93
Lektioner
346

Vanliga frågor

Är lektionen ”Materialisering (ToList, ToDictionary) och prestandaanmärkningar” gratis?

Ja – hela texten till ”Materialisering (ToList, ToDictionary) och prestandaanmärkningar” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C# Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C# Academy innehåller totalt 3 lektioner.

Vad lär jag mig i ”Materialisering (ToList, ToDictionary) och prestandaanmärkningar”?

Omvandla uppskjutna frågor till konkreta samlingar med ToList/ToArray/ToDictionary; undvik upprepad uppräkning och lär dig reglerna för unika nycklar. Ni övar på C# Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C# Academy?

Du behöver inga förkunskaper. Utbildningen i C# Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 3.

Hur lång tid tar lektionen ”Materialisering (ToList, ToDictionary) och prestandaanmärkningar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C# Academy-lektionen?

Ja. Varje C# Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. GroupBy, Join, Aggregate och projektioner (anonyma typer)
  2. Materialisering (ToList, ToDictionary) och prestandaanmärkningar
  3. Tips för komponerbarhet
← Tillbaka till C# Academy