2012-02-15 16 views
10

me gustaría usar algo como esto:Arsenal de los diccionarios en C#

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

Pero, cuando lo haga:

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

Se lanza " 'TargetInvocationException' ... Se inició una excepción por el objetivo de una invocación ".

¿Cuál es el problema? ¿Estoy usando esa matriz de diccionarios correctamente?

+3

Hmmm, debería obtener una 'NullReferenceException'. Mostrar más código – leppie

+1

¿Ha inicializado 'matriz [0]' a un nuevo 'Diccionario '? Además, 'TargetInvocationException' es parte del espacio de nombres' System.Reflection'. ¿Dónde estás usando la reflexión? –

Respuesta

18

Prueba esto:

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

Es necesario crear una instancia los diccionarios dentro de la gama antes de poder utilizarlas.

+7

También puede simlpify "new Dictionary []" para simplemente "nuevo []" –

2

Has inicializado la matriz, pero no el diccionario. Debe inicializar la matriz [0] (aunque eso debería causar una excepción de referencia nula).

7

¿Ha establecido los objetos de matriz en las instancias del diccionario?

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

Has olvidado inicializar el Diccionario. Sólo hay que poner la línea de abajo antes de agregar el material:

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

Hacer esto asigna la 'matriz' array, pero los diccionarios de los supuestos que deben figurar en esa matriz no son instanciados. Debe crear un objeto de diccionario en todas las celdas de la matriz utilizando la nueva palabra clave.

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