2013-06-02 24 views
5

Ai vecchi tempi, si potrebbe convenientemente inizializziamo collezioni mutevoli usare le parentesi, come nel seguente esempio:Posso inizializzare una collezione immutable BCL usando le parentesi graffe?

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}; 

C'è una sintassi simile che può essere utilizzato con le collezioni immutabili BCL? Capisco che sia ancora una pre-release ma forse c'è una sintassi raccomandata, o almeno questa domanda servirà come feedback per implementare questi convenienti inizializzatori.

Nel frattempo, la più breve che ho trovato è il seguente:

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}.ToImmutableDictionary(); 

risposta

7

C'è una sintassi simile che può essere utilizzato con le collezioni immutabili BCL?

Non per quanto ne sono a conoscenza - purtroppo oggetto e di raccolta inizializzatori baso sulla mutevolezza. A tale riguardo è un peccato che il linguaggio non sia progettato in modo tale che se esiste un metodo Add con un valore di ritorno, può essere utilizzato come valore intermedio. (Questo non sarebbe d'aiuto con l'impostazione delle proprietà negli inizializzatori degli oggetti, mi raccomando, e preferisco il nome Plus a Add per rendere la semantica più chiara.)

Penso che l'approccio che stai già utilizzando sia il più appropriato per una scorciatoia.

Per ImmutableList E 'un po' più semplice:

var list = ImmutableList.Create(1, 2, 3); 

che è abbastanza semplice (e permette di inferenza di tipo), ma io non conosco nulla di simile per ImmutableDictionary. C'è un sovraccarico di Create che prende uno IEnumerable<TKey, TValue>, ma la costruzione di qualsiasi implementazione è verosimile quanto la costruzione del dizionario mutabile come si sta già facendo.