2015-03-26 40 views
5

Perché ImmutableArray sembrano non esserci in Microsoft Immutabile Collezioni NuGet pacchetto versione 1.0.34?Dove si trova ImmutableArray?

enter image description here

+0

Probabilmente non hai costruttore pubblico e si deve utilizzare un metodo factory per costruirlo. – leppie

+0

@leppie è giusto, come una singola ricerca su Google vi mostrerà: https://msdn.microsoft.com/en-us/library/dn638264(v=vs.111).aspx?cs-save-lang=1&cs- lang = csharp # codice-frammento-1, ma vorrei solo usare questo: https://msdn.microsoft.com/en-us/library/dn628186(v=vs.111).aspx – Carsten

+0

non riesco a trovare il l'intera classe. Vorrei modificare il post per rimuovere il "nuovo" dall'immagine ma non trovo il link "modifica" (forse non abbastanza reputazione o semplicemente non è il mio giorno oggi :) – karl25233

risposta

7

ImmutableArray non è presente nella tua versione della biblioteca.

Come si può vedere nel version history, le note di rilascio per 1.1.20 menzione "Re-incluso ImmutableArray <T>"

È possibile trovare la spiegazione del perché ImmutableArray era assente dalla versione 1.0 in. Blog NET, in questo announcement. (In breve - la squadra Roslyn ha avuto un calo di prestazioni evidente quando hanno cercato di utilizzare questo tipo, invece di array regolari, e il team responsabile della biblioteca non era sicuro di come risolvere il problema che, pur mantenendo un API ragionevole.)

Troverai le versioni più recenti della libreria con il suo nuovo pacchetto NuGet, System.Collections.Immutable.

NB .: Secondo il source code nelle nuove versioni di System.Collections.Immutable, hanno evidentemente deciso di prendere il colpo API - cioè, alcune operazioni su un non inizializzate ImmutableArray getteranno un sorprendente NullReferenceException s. Chiaramente, ImmutableArray dovrebbe mai essere istanziato con new. (ImmutableArray<T>.Empty dovrebbe essere usato al posto)

+0

Informazioni interessanti nell'annuncio a cui ti sei collegato - grazie! – karl25233

1

Dal documentation:

public static class ImmutableArray 

Il ImmutableArray è statica, quindi non è possibile creare un'istanza di esso. Uso:

ImmutableArray.Create<T>(); // Creates an empty immutable array 
+0

Hai provato questo? Voglio dire, per me l'intera classe ImmutableArray non sembra essere lì. – karl25233

+0

Hai ragione, @ jean-hominal ha la risposta al motivo per cui non è presente. Mi manca anche nel mio pacchetto. Ma per quanto riguarda la creazione, la mia risposta è valida. ;) – Alasjo

+1

Solo che si * può * creare un '' ImmutableArray con 'nuova ImmutableArray ' - ma è l'unico che può essere creato in questo modo è vuoto. (Promemoria: ogni 'struct' definisce un costruttore di argomenti zero che non può essere ridefinito) –