Materialisierung (ToList, ToDictionary) und Performance-Hinweise
Wandeln Sie verzögerte Abfragen mit ToList/ToArray/ToDictionary in konkrete Sammlungen um. Vermeiden Sie wiederholte Aufzählungen und beachten Sie die Regeln für eindeutige Schlüssel.
Materialisierung (ToList, ToDictionary) und Performance-Hinweise ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.
Warum materialisieren
Verzögerte Abfragen werden bei jeder Aufzählung erneut ausgeführt.
- Materialisieren Sie, um einen Snapshot zu erstellen.
- Vermeiden Sie mehrfache erneute Ausführungen teurer Abfragen.
- Wählen Sie je nach Aufgabe List, Array oder Dictionary.
ToList / ToArray
ToList/ToArray führen die Abfrage einmal aus und speichern die Ergebnisse; spätere Änderungen an der Quelle werden nicht berücksichtigt.
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
}
}
Grundlagen von ToDictionary
ToDictionary materialisiert in ein Dictionary<K,V>. Die Schlüssel müssen eindeutig sein, andernfalls wird eine Ausnahme ausgelöst.
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
}
}
Duplikate: ToLookup/GroupBy
Wenn Schlüssel mehrfach vorkommen können, verwenden Sie vorzugsweise ToLookup (Dictionary mit mehreren Werten) oder GroupBy statt 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);
}
}
}
Mehrfache Aufzählung vermeiden
Bei jeder Aufzählung kann die Verarbeitung erneut ausgeführt werden. Materialisieren Sie einmal (z. B. mit ToList), wenn Sie die Sequenz mehrfach durchlaufen.
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
}
}
Checkliste zur Materialisierung
Checkliste:
- Verwenden Sie ToList/ToArray, um einen Snapshot zu erstellen.
- Verwenden Sie ToDictionary, wenn die Schlüssel eindeutig sind; andernfalls ToLookup/GroupBy.
- Vermeiden Sie eine mehrfache Aufzählung teurer Quellen; speichern Sie sie einmal zwischen.
- Materialisieren Sie an Übergängen (E/A, Datenbankaufrufe), um ein vorhersehbares Verhalten zu erzielen.
Voraussetzung für ToDictionary
Zusammenfassung
Zusammenfassung: Materialisieren Sie mit ToList/ToArray, um Snapshots zu erstellen, mit ToDictionary für schnelle Suchvorgänge (eindeutige Schlüssel), und speichern Sie Ergebnisse zwischen, um eine erneute Ausführung teurer Abfragen zu vermeiden.
Häufig gestellte Fragen
Ist die Lektion „Materialisierung (ToList, ToDictionary) und Performance-Hinweise“ kostenlos?
Ja — der vollständige Text von „Materialisierung (ToList, ToDictionary) und Performance-Hinweise“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.
Was lerne ich in „Materialisierung (ToList, ToDictionary) und Performance-Hinweise“?
Wandeln Sie verzögerte Abfragen mit ToList/ToArray/ToDictionary in konkrete Sammlungen um. Vermeiden Sie wiederholte Aufzählungen und beachten Sie die Regeln für eindeutige Schlüssel. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 3.
Wie lange dauert die Lektion „Materialisierung (ToList, ToDictionary) und Performance-Hinweise“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- GroupBy, Join, Aggregate und Projektionen (anonyme Typen)
- Materialisierung (ToList, ToDictionary) und Performance-Hinweise
- Tipps zur Komponierbarkeit