Inizializzazione della raccolta

Inizializzazione della raccolta

Il tuo primo esempio è la sintassi del linguaggio standard per l'inizializzazione di una matrice di numeri interi. Il valore di sinistra restituisce int[]. Nel secondo esempio stai tentando di assegnare un int[] a un List. L'operatore di assegnazione non lo supporta poiché sono di tipi diversi. Un elenco è non un array di tipo int. Come hai detto, tuttavia, esiste un costruttore per List che accetta un int[] come argomento e il nuovo zucchero sintattico aggiunto in C# 3.0 ti consente la comodità di usare { } per aggiungere membri alla raccolta definita da il costruttore predefinito.

Come dice @Patrik, questo non funzionerà per LinkedList perché non definisce il metodo Add() come parte della sua interfaccia (c'è un'implementazione esplicita di ICollection.Add) quindi lo zucchero sintattico non funzionerà.

Tuttavia, esiste una soluzione semplice per LinkedList.

public class LinkedListWithInit<T> : LinkedList<T>
{
    public void Add( T item )
    {
        ((ICollection<T>)this).Add(item);
    }
}

LinkedList<int> list = new LinkedListWithInit<int> { 1, 2, 3, 4, 5 };

Ecco quali sono le Specifiche del linguaggio C# 3.0 ha da dire sull'argomento:

Ha senso se ci pensi. Il compilatore si assicura che tu stia lavorando su un tipo enumerabile che implementa una funzione Add (attraverso la quale esegue l'inizializzazione).