Zieltypinferenz bei Collections
Lassen Sie den Zieltyp die Erstellung der Collection bestimmen.
Zieltypinferenz bei Collections ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Was ist Target-Typisierung?
Target-Typisierung bedeutet, dass der Compiler anhand des Kontexts ermittelt, was ein Collection-Ausdruck erstellen soll, statt einen expliziten Typ auf der rechten Seite zu benötigen.
using System;
int[] numbers = [1, 2, 3]; // target type is int[]
Console.WriteLine(numbers.GetType().Name); // Int32[]Der Zieltyp bestimmt den Typ
Dasselbe Literal wird abhängig davon zu einem anderen konkreten Typ, ob es in eine Variable, einen Parameter oder einen Rückgabetyp fließt.
using System;
using System.Collections.Generic;
int[] asArray = [1, 2, 3];
List<int> asList = [1, 2, 3];
Console.WriteLine(asArray is int[]); // True
Console.WriteLine(asList is List<int>); // TrueTarget-Typisierung bei Methodenaufrufen
Wenn ein Methodenparameter ein Collection-Typ ist, wird das Literal des Arguments anhand dieses Parameters typisiert.
using System;
using System.Collections.Generic;
static void Show(List<int> items) =>
Console.WriteLine(string.Join(",", items));
Show([10, 20, 30]); // target-typed to List<int>Target-Typisierung bei Rückgabewerten
Der Methodenrumpf kann einen reinen Collection-Ausdruck zurückgeben; der deklarierte Rückgabetyp liefert den Zieltyp.
using System;
using System.Collections.Generic;
static List<string> Tags() => ["csharp", "dotnet", "ranges"];
Console.WriteLine(Tags().Count); // 3Ableitung des Elementtyps
Der Elementtyp stammt vom Zieltyp. Wenn das Ziel double[] ist, werden Integer-Literale automatisch zu double erweitert.
using System;
double[] values = [1, 2, 3]; // ints widen to double
Console.WriteLine(values[0] + 0.5); // 1.5Schnittstellen als Zieltypen
Collection-Ausdrücke können auf Schnittstellen wie IEnumerable<T>, IReadOnlyList<T> oder ICollection<T> abzielen; der Compiler wählt einen geeigneten konkreten Typ.
using System;
using System.Collections.Generic;
IReadOnlyList<int> ro = [1, 2, 3];
Console.WriteLine(ro.Count); // 3Bedingte Ausdrücke und Target-Typisierung
Beide Zweige eines bedingten Ausdrucks können Collection-Ausdrücke sein, die jeweils anhand des gemeinsamen Ergebnistyps typisiert werden.
using System;
bool useDefaults = false;
int[] config = useDefaults ? [0, 0, 0] : [1, 2, 3];
Console.WriteLine(string.Join(",", config)); // 1,2,3var ist kein Zieltyp
Sie können var x = [1, 2, 3]; nicht schreiben, weil var keinen Zieltyp bereitstellt. Geben Sie einen expliziten Typ an oder verwenden Sie den Ausdruck dort, wo ein Typ erwartet wird.
using System;
// var x = [1, 2, 3]; // compile error: no target type
int[] x = [1, 2, 3]; // ok
Console.WriteLine(x.Length); // 3Target-Typisierung mit Spreads
Target-Typisierung und Spreads arbeiten zusammen: Der Zieltyp bestimmt den endgültigen Collection-Typ, während die Spreads den Inhalt liefern.
using System;
using System.Collections.Generic;
int[] src = [1, 2, 3];
List<int> copy = [..src]; // copies into a List<int>
Console.WriteLine(copy is List<int>); // TrueWeniger überflüssiger Code
Target-Typisierung vermeidet wiederholte Typnamen. Vergleichen Sie die redundante alte Form mit der kompakten neuen.
using System;
// old: type repeated
int[] oldWay = new int[] { 1, 2, 3 };
// new: type only on the left
int[] newWay = [1, 2, 3];
Console.WriteLine(oldWay.Length == newWay.Length); // TrueAlles zusammenführen
Hier akzeptiert ein einzelner Helfer jede schreibgeschützte Collection, und Aufrufer können beliebige zieltypisierte Literale übergeben.
using System;
using System.Collections.Generic;
static int Count(IReadOnlyCollection<int> c) => c.Count;
Console.WriteLine(Count([1, 2, 3, 4])); // 4Kurzer Test
Testen Sie Ihr Verständnis der Target-Typisierung.
Zusammenfassung
Sie haben gelernt, wie Collection-Ausdrücke anhand des Zieltyps typisiert werden.
- Der Zieltyp (Variable, Parameter oder Rückgabewert) bestimmt die Erstellung.
- Elementtypen können erweitert werden, damit sie zum Zieltyp passen.
- Schnittstellen wie
IReadOnlyList<T>sind gültige Zieltypen. varkann kein Zieltyp sein.
Häufig gestellte Fragen
Ist die Lektion „Zieltypinferenz bei Collections“ kostenlos?
Ja — der vollständige Text von „Zieltypinferenz bei Collections“ 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 „Zieltypinferenz bei Collections“?
Lassen Sie den Zieltyp die Erstellung der Collection bestimmen. 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 3 von 4.
Wie lange dauert die Lektion „Zieltypinferenz bei Collections“?
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
- Syntax von Collection-Ausdrücken
- Das Spread-Element
- Zieltypinferenz bei Collections
- Collection Builder