2012-02-15 16 views
10

vorrei usare qualcosa di simile:Array di dizionari in C#

Dictionary<int, string>[] matrix = new Dictionary<int, string>[2]; 

Ma, quando lo faccio:

matrix[0].Add(0, "first str"); 

E getta " 'TargetInvocationException' ... eccezione è stata generata dall'obiettivo di un'invocazione ".

Qual è il problema? Sto usando quella serie di dizionari correttamente?

+3

Hmmm, si dovrebbe ottenere un 'NullReferenceException'. Mostra altro codice. – leppie

+1

Hai inizializzato 'matrix [0]' in un nuovo 'Dizionario '? Inoltre, 'TargetInvocationException' fa parte dello spazio dei nomi' System.Reflection'. Dove stai usando la riflessione? –

risposta

18

Prova questa:

Dictionary<int, string>[] matrix = new Dictionary<int, string>[] 
{ 
    new Dictionary<int, string>(), 
    new Dictionary<int, string>() 
}; 

È necessario istanziare i dizionari all'interno della matrice prima di poterli utilizzare.

+7

È anche possibile simplicare "nuovo dizionario []" su "nuovo []" –

2

L'array è stato inizializzato, ma non il dizionario. È necessario inizializzare la matrice [0] (anche se ciò dovrebbe causare un'eccezione di riferimento null).

7

Hai impostato gli oggetti array su istanze di Dictionary?

Dictionary<int, string>[] matrix = new Dictionary<int, string>[2]; 
matrix[0] = new Dictionary<int, string>(); 
matrix[1] = new Dictionary<int, string>(); 
matrix[0].Add(0, "first str"); 
1

Hai dimenticato di inizializzare il dizionario. Basta mettere la riga sotto prima di aggiungere l'articolo:

matrix[0] = new Dictionary<int, string>(); 
2
Dictionary<int, string>[] matrix = new Dictionary<int, string>[2]; 

In questo modo si assegna l'array 'matrix', ma i dizionari che si suppone essere contenute in tale matrice non vengono mai istanziati. Devi creare un oggetto Dizionario in tutte le celle dell'array usando la nuova parola chiave.

matrix[0] = new Dictionary<int, string>(); 
matrix[0].Add(0, "first str");