Inferenza del tipo di destinazione per le raccolte
Lasci che il tipo di destinazione determini la creazione della raccolta.
Inferenza del tipo di destinazione per le raccolte è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.
Che cos'è la tipizzazione in base al tipo di destinazione?
La tipizzazione in base al tipo di destinazione indica che il compilatore deduce che cosa debba costruire un'espressione di raccolta dal contesto in cui viene usata, anziché da un tipo esplicito a destra dell'assegnazione.
using System;
int[] numbers = [1, 2, 3]; // target type is int[]
Console.WriteLine(numbers.GetType().Name); // Int32[]Il tipo di destinazione determina il tipo
Lo stesso valore letterale diventa un tipo concreto diverso a seconda del tipo della variabile, del parametro o del valore restituito in cui viene utilizzato.
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>); // TrueTipizzazione in base al tipo di destinazione nelle chiamate di metodi
Quando il parametro di un metodo è un tipo di raccolta, il valore letterale dell'argomento viene tipizzato in base al tipo di destinazione costituito da quel parametro.
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>Tipizzazione in base al tipo di destinazione nei valori restituiti
Il corpo di un metodo può restituire direttamente un'espressione di raccolta; il tipo restituito dichiarato fornisce il tipo di destinazione.
using System;
using System.Collections.Generic;
static List<string> Tags() => ["csharp", "dotnet", "ranges"];
Console.WriteLine(Tags().Count); // 3Inferenza del tipo degli elementi
Il tipo degli elementi deriva dal tipo di destinazione. Se la destinazione è double[], i valori letterali interi vengono convertiti automaticamente in double.
using System;
double[] values = [1, 2, 3]; // ints widen to double
Console.WriteLine(values[0] + 0.5); // 1.5Le interfacce come destinazioni
Le espressioni di raccolta possono avere come destinazione interfacce come IEnumerable<T>, IReadOnlyList<T> o ICollection<T>; il compilatore sceglie un tipo concreto appropriato.
using System;
using System.Collections.Generic;
IReadOnlyList<int> ro = [1, 2, 3];
Console.WriteLine(ro.Count); // 3Operatore ternario e tipizzazione in base al tipo di destinazione
Entrambi i rami di un'espressione condizionale possono essere espressioni di raccolta, ciascuna tipizzata in base al tipo di destinazione comune del risultato.
using System;
bool useDefaults = false;
int[] config = useDefaults ? [0, 0, 0] : [1, 2, 3];
Console.WriteLine(string.Join(",", config)); // 1,2,3var non è un tipo di destinazione
Non è possibile scrivere var x = [1, 2, 3]; perché var non fornisce alcun tipo di destinazione. Indichi un tipo esplicito oppure usi l'espressione dove è previsto un tipo.
using System;
// var x = [1, 2, 3]; // compile error: no target type
int[] x = [1, 2, 3]; // ok
Console.WriteLine(x.Length); // 3Tipizzazione in base al tipo di destinazione con le espansioni
La tipizzazione in base al tipo di destinazione e le espansioni collaborano: il tipo di destinazione determina il tipo finale della raccolta, mentre le espansioni ne forniscono il contenuto.
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>); // TrueRidurre il codice superfluo
La tipizzazione in base al tipo di destinazione elimina la ripetizione dei nomi dei tipi. Confronti la vecchia forma ridondante con quella nuova e più concisa.
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); // TrueMettere insieme i concetti
Qui un singolo helper accetta qualsiasi raccolta di sola lettura e i chiamanti possono passare liberamente valori letterali tipizzati in base al tipo di destinazione.
using System;
using System.Collections.Generic;
static int Count(IReadOnlyCollection<int> c) => c.Count;
Console.WriteLine(Count([1, 2, 3, 4])); // 4Verifica rapida
Verifichi la Sua comprensione della tipizzazione in base al tipo di destinazione.
Riepilogo
Ha appreso come le espressioni di raccolta vengono tipizzate in base al tipo di destinazione.
- Il tipo di destinazione (variabile, parametro o valore restituito) determina la costruzione.
- I tipi degli elementi possono essere ampliati per adattarsi alla destinazione.
- Le interfacce come
IReadOnlyList<T>sono destinazioni valide. varnon può essere un tipo di destinazione.
Domande Frequenti
La lezione «Inferenza del tipo di destinazione per le raccolte» è gratuita?
Sì — il testo completo di «Inferenza del tipo di destinazione per le raccolte» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.
Cosa imparerò in «Inferenza del tipo di destinazione per le raccolte»?
Lasci che il tipo di destinazione determini la creazione della raccolta. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Inferenza del tipo di destinazione per le raccolte»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Sintassi delle espressioni di raccolta
- L'elemento spread
- Inferenza del tipo di destinazione per le raccolte
- Collection builder