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.
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
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.
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
- GroupBy, Join, Aggregate og projiseringer (anonyme typer)
- Materialisering (ToList, ToDictionary) og ytelsesmerknader
- Tips for komponerbarhet