2014-12-02 13 views
45

In un recente passato, c'è stato un gran parlare di che cosa è nuovo in C# 6.0
Uno dei più parlato di funzionalità sta utilizzando Dictionary initializers in C# 6.0
Ma l'attesa abbiamo utilizzato inizializzatori raccolta per inizializzare le collezioni e può benissimo inizializzare un Dictionary anche in .NET 4.0 e .NET 4.5 (non sappiamo circa vecchia versione) comeQuali vantaggi aggiungono gli inizializzatori dei dizionari agli inizializzatori della raccolta?

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
    { 1,"Pankaj"}, 
    { 2,"Pankaj"}, 
    { 3,"Pankaj"} 
}; 

Allora, cosa c'è di nuovo in C# 6.0, che dizionario Initializer stanno parlando in C# 6.0

+3

@DevEstacion Il titolo della domanda può essere modificato in "Qual è la differenza tra gli inizializzatori di raccolta e dizionario" o "Quali vantaggi gli inizializzatori di dizionario aggiungono agli inizializzatori di raccolta" per differenziare da una "domanda googleable semplice" – i3arnon

risposta

72

Mentre si potrebbe inizializzare un dizionario con inizializzatori raccolta, è abbastanza ingombrante. Soprattutto per qualcosa che dovrebbe essere zucchero sintattico.

inizializzatori dizionario sono molto più puliti:

var myDict = new Dictionary<int, string> 
{ 
    [1] = "Pankaj", 
    [2] = "Pankaj", 
    [3] = "Pankaj" 
}; 

Ancora più importante di questi inizializzatori non sono solo per i dizionari, possono essere utilizzati per qualsiasi oggetto che supporta un indicizzatore, ad esempio List<T>:

var array = new[] { 1, 2, 3 }; 
var list = new List<int>(array) { [1] = 5 }; 
foreach (var item in list) 
{ 
    Console.WriteLine(item); 
} 

Uscita:

1 
5 
3 
+12

Non è la stessa cosa. La vecchia versione chiama il metodo 'Add' (che ora può essere un metodo di estensione in C#) e il nuovo chiama l'indicizzatore. Il risultato finale potrebbe essere lo stesso per i dizionari, ma il nuovo può essere utilizzato su tipi che hanno indicizzatori ma non metodi 'Aggiungi'. –

+0

@PauloMorgado Ovviamente. Non ho suggerito il contrario. – i3arnon

+4

@ I3arnon, no non l'hai fatto. Quando ho letto la domanda e la tua risposta, ho pensato che potesse essere frainteso come la stessa cosa. Stavo solo rinforzando la tua risposta. –

2

Nuovo è crea ting un dizionario in questo modo

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
    [1] = "Pankaj", 
    [2] = "Pankaj", 
    [3] = "Pankaj" 
}; 

con lo stile di <index> = <value>

obsoleto: la sintassi membro indicizzato stringa (come indicato nei commenti)

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
     $1 = "Pankaj", 
     $2 = "Pankaj", 
     $3 = "Pankaj" 
    }; 

Tratto da A C# 6.0 Language Preview

Per capire il $ operat oppure, dai un'occhiata alla chiamata della funzione AreEqual. Si noti la chiamata del membro del dizionario di "$ Boolean" nella variabile builtInDataTypes, anche se non c'è alcun membro "Boolean" nel dizionario. Tale membro esplicito non è richiesto perché l'operatore $ richiama il membro indicizzato sul dizionario, l'equivalente di chiamare buildInDataTypes ["Boolean"].

+9

AFAIK l'operatore $ non esiste più. – i3arnon

Problemi correlati