2012-02-15 45 views
10

Tôi muốn sử dụng một cái gì đó như thế này:Array của từ điển trong C#

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

Nhưng, khi tôi làm:

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

Nó ném " 'TargetInvocationException' ... ngoại lệ đã được ném bởi mục tiêu của một lời kêu gọi. "

Sự cố là gì? Tôi có sử dụng các từ điển đó một cách chính xác không?

+3

Hmmm, bạn sẽ nhận được 'NullReferenceException'. Hiển thị thêm mã. – leppie

+1

Bạn đã khởi tạo 'ma trận [0]' thành một từ mới 'Dictionary '? Ngoài ra, 'TargetInvocationException' là một phần của không gian tên' System.Reflection'. Bạn đang sử dụng phản chiếu ở đâu? –

Trả lời

18

Hãy thử điều này:

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

Bạn cần phải nhanh chóng các từ điển bên trong mảng trước khi bạn có thể sử dụng chúng.

+7

Bạn cũng có thể mô phỏng "từ điển mới []" thành "mới []" –

2

Bạn đã khởi tạo mảng, chứ không phải từ điển. Bạn cần khởi tạo ma trận [0] (mặc dù điều đó sẽ gây ra một ngoại lệ tham chiếu null).

7

Bạn đã đặt đối tượng mảng thành các phiên bản của từ điển chưa?

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

Bạn quên khởi chạy từ điển. Chỉ cần đặt hàng dưới đây trước thêm các mục:

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

Việc làm này phân bổ mảng 'ma trận', nhưng các từ điển nghĩa vụ phải được chứa trong đó mảng không bao giờ được khởi tạo. Bạn phải tạo một đối tượng Dictionary trong tất cả các ô trong mảng bằng cách sử dụng từ khóa mới.

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