C# Academy · Lektion

Collection Builder

Unterstützen Sie Collection-Ausdrücke in eigenen Typen.

Lektion 4 von 413 Schritte

Collection Builder ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. 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 4 Lektionen.

Benutzerdefinierte Typen in Collection-Ausdrücken

Collection-Ausdrücke sind nicht auf integrierte Typen beschränkt. Mit dem Attribut [CollectionBuilder] kann Ihr eigener Typ aus der Syntax [...] erstellt werden.

Das CollectionBuilder-Attribut

Sie wenden [CollectionBuilder(typeof(Factory), "Create")] auf Ihren Collection-Typ an. Damit benennen Sie eine statische Factory-Methode, die der Compiler zum Erstellen von Instanzen aufruft.

Signatur der Builder-Methode

Die Builder-Methode muss static sein, genau einen Parameter vom Typ ReadOnlySpan<T> annehmen und Ihren Collection-Typ zurückgeben. Der Compiler übergibt die Elemente als Span.

Eine minimale benutzerdefinierte Collection

Hier sehen Sie eine kleine unveränderliche Collection, die die Erstellung über Collection-Ausdrücke mithilfe eines Builders unterstützt.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

[CollectionBuilder(typeof(IntBagBuilder), "Create")]
class IntBag : IEnumerable<int> {
    private readonly int[] items;
    public IntBag(ReadOnlySpan<int> data) => items = data.ToArray();
    public IEnumerator<int> GetEnumerator() => ((IEnumerable<int>)items).GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}

static class IntBagBuilder {
    public static IntBag Create(ReadOnlySpan<int> data) => new IntBag(data);
}

IntBag bag = [1, 2, 3];
foreach (int n in bag) Console.Write(n + " "); // 1 2 3
Console.WriteLine();

Warum ReadOnlySpan?

Der Span-Parameter ermöglicht es dem Compiler, die Elemente ohne Zwischenallokation zu übergeben. Ihr Builder kopiert sie in den benötigten Speicher.

IEnumerable ist erforderlich

Der Collection-Typ muss IEnumerable<T> implementieren, wobei der Elementtyp mit dem Elementtyp des Spans übereinstimmt. So kann der Compiler den Elementtyp erkennen und die Verwendung überprüfen.

Generische Builder

Builder können generisch sein und dadurch MyCollection<T> unterstützen. Die Builder-Methode nimmt ReadOnlySpan<T> entgegen und gibt MyCollection<T> zurück.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

[CollectionBuilder(typeof(BoxBuilder), "Create")]
class Box<T> : IEnumerable<T> {
    private readonly T[] items;
    public Box(ReadOnlySpan<T> d) => items = d.ToArray();
    public IEnumerator<T> GetEnumerator() => ((IEnumerable<T>)items).GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}

static class BoxBuilder {
    public static Box<T> Create<T>(ReadOnlySpan<T> d) => new Box<T>(d);
}

Box<string> b = ["x", "y"];
foreach (var s in b) Console.Write(s + " "); // x y
Console.WriteLine();

Vorteil für unveränderliche Collections

Builder ermöglichen es den unveränderlichen Collections von .NET, etwa ImmutableArray<T>, Collection-Ausdrücke zu unterstützen. Der Builder erstellt die unveränderliche Instanz aus dem Span.

using System;
using System.Collections.Immutable;

ImmutableArray<int> nums = [1, 2, 3];
Console.WriteLine(nums.Length); // 3

Spreads funktionieren ebenfalls

Sobald ein Typ über einen Builder verfügt, funktionieren Spreads automatisch innerhalb seiner Collection-Ausdrücke, da der Compiler weiterhin einen einzigen Span mit den Elementen erzeugt.

using System;
using System.Collections.Immutable;

ImmutableArray<int> a = [1, 2];
ImmutableArray<int> all = [..a, 3, 4];
Console.WriteLine(all.Length); // 4

Wann Sie einen Builder hinzufügen sollten

Fügen Sie [CollectionBuilder] hinzu, wenn Sie eine benutzerdefinierte Collection bereitstellen und Aufrufern die kompakte Syntax [...] ermöglichen möchten, insbesondere bei unveränderlichen oder spezialisierten Containern.

Alles zusammenführen

Ein Builder besteht aus genau drei Teilen: dem Attribut, einem IEnumerable<T>-Typ und einer statischen Methode Create(ReadOnlySpan<T>). Damit wird Ihr Typ zu einem vollwertigen Ziel für Collection-Ausdrücke.

Kurzer Test

Überprüfen Sie die Anforderungen an einen Collection-Builder.

Zusammenfassung

Sie haben gelernt, wie benutzerdefinierte Typen Collection-Ausdrücke unterstützen.

  • Wenden Sie [CollectionBuilder(typeof(Factory), "Create")] auf den Typ an.
  • Die Factory ist eine static-Methode, die ReadOnlySpan<T> entgegennimmt.
  • Der Typ muss IEnumerable<T> implementieren.
  • So kann ImmutableArray<T> die Syntax [...] akzeptieren.
Kostenlos starten

Lerne C# mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
93
Lektionen
346

Häufig gestellte Fragen

Ist die Lektion „Collection Builder“ kostenlos?

Ja — der vollständige Text von „Collection Builder“ 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 4 Lektionen.

Was lerne ich in „Collection Builder“?

Unterstützen Sie Collection-Ausdrücke in eigenen Typen. 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 4 von 4.

Wie lange dauert die Lektion „Collection Builder“?

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

  1. Syntax von Collection-Ausdrücken
  2. Das Spread-Element
  3. Zieltypinferenz bei Collections
  4. Collection Builder
← Zurück zu C# Academy