C# Academy · Lektion

Materialisering (ToList, ToDictionary) og ydelsesnoter

Omdan udskudte forespørgsler til konkrete samlinger med ToList/ToArray/ToDictionary, undgå gentagen gennemløbning, og kend reglerne for entydige nøgler.

Lektion 2 af 38 trin

Materialisering (ToList, ToDictionary) og ydelsesnoter er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 3 lektioner i alt.

Hvorfor materialisere

Udskudte forespørgsler udføres, hver gang du opregner dem.

  • Materialisér for at tage et øjebliksbillede
  • Undgå at køre dyre forespørgsler flere gange
  • Vælg List, Array eller Dictionary til opgaven

ToList / ToArray

ToList/ToArray udfører forespørgslen én gang og gemmer resultaterne; senere ændringer i kilden afspejles ikke.

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

Grundlæggende om ToDictionary

ToDictionary materialiserer til en Dictionary<K,V>. Nøglerne skal være unikke; ellers udløser den en undtagelse.

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

Dubletter: ToLookup/GroupBy

Når nøgler kan gentages, bør du foretrække ToLookup (ordbog med flere værdier) eller GroupBy frem for 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);
    }
  }
}

Undgå flere opregninger

Hver opregning kan køre arbejdet igen. Materialisér én gang (f.eks. ToList), når du vil opregne flere gange.

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

Tjekliste for materialisering

Tjekliste:

  • Brug ToList/ToArray til at tage et øjebliksbillede.
  • Brug ToDictionary, når nøglerne er unikke; ellers ToLookup/GroupBy.
  • Undgå flere opregninger af dyre kilder; gem resultatet én gang.
  • Materialisér nær grænser (I/O, databasekald) for at få forudsigelig adfærd.

Krav til ToDictionary

Hurtigt tjek: Hvad skal være sandt, når du bruger ToDictionary(keySelector) på en sekvens?

Opsummering

Opsummering: Materialisér med ToList/ToArray for øjebliksbilleder, ToDictionary for hurtigt opslag (unikke nøgler), og gem resultatet for at undgå at køre dyre forespørgsler igen.

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “Materialisering (ToList, ToDictionary) og ydelsesnoter” gratis?

Ja — hele teksten til “Materialisering (ToList, ToDictionary) og ydelsesnoter” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 3 lektioner i alt.

Hvad lærer jeg i “Materialisering (ToList, ToDictionary) og ydelsesnoter”?

Omdan udskudte forespørgsler til konkrete samlinger med ToList/ToArray/ToDictionary, undgå gentagen gennemløbning, og kend reglerne for entydige nøgler. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.

Hvor lang tid tager lektionen “Materialisering (ToList, ToDictionary) og ydelsesnoter”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. GroupBy, Join, Aggregate og projektioner (anonyme typer)
  2. Materialisering (ToList, ToDictionary) og ydelsesnoter
  3. Tips til komposition
← Tilbage til C# Academy