0

C# でギザギザの配列を作成する際に、この問題を理解するのに苦労しています。以下のコードを見ると、問題なくコンパイルされています。しかし、配列「場所」に値を代入している 2 行を取り、それらをメソッド内からクラス自体内に移動すると、コンパイラーは多くの奇妙なエラーで不平を言い始めます。

最初は、クラス内で「new」キーワードを使用したためだと思いました(クラスは単なる定義ですが、「new」はインスタンスを参照します...定義内にインスタンスを含めることはできませんか? ?)。しかし、「場所」の初期化での「new」キーワードの使用は、クラス内で初期化されていても問題ないことに気付きました。説明してください。

public class Place
{
string[][] places = new string[2][];
   public void enumerate()
   {
     places[0] = new string[] { "Canada", "United States" };
     places[1] = new string[] { "Calgary", "Edmonton", "Toronto" };

     Console.WriteLine(places[0][1]);
   }
}

編集:明示的に言うと、実行時にエラーが発生します

public class Place
{
string[][] places = new string[2][];
places[0] = new string[] { "Canada", "United States" };
places[1] = new string[] { "Calgary", "Edmonton", "Toronto" };
   public void enumerate()
   {
     Console.WriteLine(places[0][1]);
   }
}

「配列サイズは変数宣言で指定できません (「新しい」式で初期化してみてください)」「無効なトークン =、{、クラス内」「名前空間にフィールドやメソッドなどのメンバーを直接含めることはできません」というエラーが発生しました

4

1 に答える 1

3

もちろん、ジャグ配列を初期化できますが、構文は少し異なります。

public class Place
{
    private string[][] places = new string[2][]
    {
        new string[] { "Canada", "United States" },
        new string[] { "Calgary", "Edmonton", "Toronto" },
    };

    public void enumerate()
    {
        Console.WriteLine(places[0][1]);
    }
}
于 2013-08-22T21:01:51.543 に答える