0Pricing
C# Academy · Lektion

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>); // True

Target-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); // 3

Ableitung 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.5

Schnittstellen 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); // 3

Bedingte 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,3

var 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); // 3

Target-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>); // True

Weniger ü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); // True

Alles 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])); // 4

Kurzer 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.
  • var kann 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

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