3

ロビーシステムを辞書の中に入れようとしています。

private Dictionary<string, Dictionary<string, string>> lobbys;

最初の文字列はロビー ID であり、ディクショナリ内のディクショナリはロビーのクライアント ユーザー名を保持しています。

次のように辞書に新しい「ロビー」を作成しようとすると:

lobbys.Add("dSd244SfasdD", null);

(「dSd244SfasdD」は一意のロビー ID であり、null はまだ作成していない null 辞書です (まだユーザーが存在しないため))

「参照されたオブジェクトがオブジェクトのインスタンスに設定されていません」というエラーが表示されます。

私は自分が間違っていることについて確信が持てず、C# にはかなり慣れていません。助けてください。ありがとう :)

4

5 に答える 5

9

まず、ロビー ディクショナリ (ディクショナリを保持する) をインスタンス化する必要があります。

lobbys = new Dictionary<string, Dictionary<string, string>>();

次に、このロビーに追加できます。追加するときは、それらの内部辞書をインスタンス化する必要があります。

lobbys.Add("dsD244SfasD", new Dictionary<string, string>());

次に、これらの内部辞書に追加すると、次のようになります。

lobbys["dsD244fasD"].Add("Client1", "Bob Jones");
lobbys["dsD244fasD"].Add("Client2", "Bill James");
于 2013-02-04T06:52:35.720 に答える
4

辞書をインスタンス化する必要があります。

lobbys = new  Dictionary<string, Dictionary<string, string>();

クラスのフィールドの場合は、Field で初期化するか、クラス コンストラクターで初期化できます。

于 2013-02-04T06:49:50.703 に答える
3

変数に値を割り当てていないため、デフォルト値は null です。lobbys( の値はオブジェクトではなく、参照であることを忘れないでください)。コンストラクターまたは宣言で値を割り当てることができます。

private Dictionary<string, Dictionary<string, string>> lobbys
    = new Dictionary<string, Dictionary<string, string>>();

(同時に変数にしたいかもしれreadonlyません - それは辞書の内容を変更することを止めませんが、変数が常に同じ辞書を参照することを意味します.)

于 2013-02-04T06:49:20.903 に答える
1

オブジェクトを使用する前に、まずオブジェクトのインスタンスを作成する必要があります。

 private Dictionary<string, Dictionary<string, string>> lobbys = new Dictionary<string, Dictionary<string, string>>();
于 2013-02-04T06:50:26.630 に答える