web-dev-qa-db-ja.com

C#の辞書の配列

私はこのようなものを使いたいです:

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

しかし、私がするとき:

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

これは、「 'TargetInvocationException' ...呼び出しのターゲットによって例外がスローされました。」をスローします。

何が問題ですか?その辞書の配列を正しく使用していますか?

18
hradecek

これを試して:

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

辞書を使用する前に、配列内で辞書をインスタンス化する必要があります。

24
Andrew Hare

配列オブジェクトをディクショナリのインスタンスに設定しましたか?

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");
10
ken
Dictionary<int, string>[] matrix = new Dictionary<int, string>[2];

これを行うと、配列「マトリックス」が割り当てられますが、その配列に含まれるはずのディクショナリはインスタンス化されません。新しいキーワードを使用して、配列内のすべてのセルにDictionaryオブジェクトを作成する必要があります。

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

配列は初期化しましたが、辞書は初期化していません。 matrix [0]を初期化する必要があります(ただし、これによりnull参照例外が発生するはずです)。

3
Erik Dietrich

辞書を初期化するのを忘れました。以下の行を追加するだけbeforeアイテムを追加:

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