C# Academy · leksjon

Materialisering (ToList, ToDictionary) og ytelsesmerknader

Gjør utsatte spørringer om til konkrete samlinger med ToList/ToArray/ToDictionary, unngå gjentatt enumerering, og kjenn reglene for unike nøkler.

Leksjon 2 av 38 trinn

Materialisering (ToList, ToDictionary) og ytelsesmerknader er en gratis leksjon i C# Academy på CoddyKit. Dette er leksjon 2 av 3. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C# Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C# Academy inneholder totalt 3 leksjoner.

Hvorfor materialisere

Utsatte spørringer kjøres hver gang de enumereres.

  • Materialiser for å ta et øyeblikksbilde
  • Unngå flere kjøringer av kostbare spørringer
  • Velg List, Array eller Dictionary etter behov

ToList / ToArray

ToList/ToArray kjører spørringen én gang og lagrer resultatene; senere endringer i kilden gjenspeiles 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
  }
}

Grunnleggende om ToDictionary

ToDictionary materialiserer til en Dictionary<K,V>. Nøklene må være unike; ellers oppstår et unntak.

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

Duplikater: ToLookup/GroupBy

Når nøkler kan gjentas, foretrekk ToLookup (ordbok med flere verdier) eller GroupBy fremfor 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);
    }
  }
}

Unngå flere enumereringer

Hver enumerering kan kjøre arbeidet på nytt. Materialiser én gang (for eksempel ToList) når sekvensen skal itereres flere ganger.

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

Sjekkliste for materialisering

Sjekkliste:

  • Bruk ToList/ToArray for å ta et øyeblikksbilde.
  • Bruk ToDictionary når nøklene er unike; ellers ToLookup/GroupBy.
  • Unngå flere enumereringer av kostbare kilder; bufre resultatet én gang.
  • Materialiser nær grenser (I/O, DB-kall) for forutsigbar oppførsel.

Krav til ToDictionary

Kort kontroll: Hva må være sant når ToDictionary(keySelector) brukes på en sekvens?

Oppsummering

Oppsummering: Materialiser med ToList/ToArray for øyeblikksbilder, ToDictionary for raske oppslag (unike nøkler), og bufre resultatet for å unngå å kjøre kostbare spørringer på nytt.

Gratis å komme i gang

Lær deg C# med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
93
Leksjoner
346

Ofte stilte spørsmål

Er leksjonen «Materialisering (ToList, ToDictionary) og ytelsesmerknader» gratis?

Ja – hele teksten i «Materialisering (ToList, ToDictionary) og ytelsesmerknader» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C# Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C# Academy inneholder totalt 3 leksjoner.

Hva lærer jeg i «Materialisering (ToList, ToDictionary) og ytelsesmerknader»?

Gjør utsatte spørringer om til konkrete samlinger med ToList/ToArray/ToDictionary, unngå gjentatt enumerering, og kjenn reglene for unike nøkler. Du øver på C# Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C# Academy?

Ingen tidligere erfaring er nødvendig. C# Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 3.

Hvor lang tid tar leksjonen «Materialisering (ToList, ToDictionary) og ytelsesmerknader»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C# Academy-leksjonen?

Ja. Alle C# Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. GroupBy, Join, Aggregate og projiseringer (anonyme typer)
  2. Materialisering (ToList, ToDictionary) og ytelsesmerknader
  3. Tips for komponerbarhet
← Tilbake til C# Academy