41334


はじめまして、一昨日からC#をやり始めました初心者です。

参考書で、クラス型配列変数の初期化について書かれていたのですが

[code]

    void Start() {
      Person[] parr = { new Person(), new Person() };
      parr[0].firstname = "太郎";
      parr[0].lastname = "山田";
      Debug.Log (parr[0].GetFullName("★"));
    }
    
[/code]

となっており、２行目のnew Person ()を何故２つ書いているのかがわかりません。

`Person[] parr = { new Person() };`

でも同様の結果となったのでますます混乱しています。  
わかる方がいらっしゃったらご教授頂きたいです、よろしくお願いします。


CC BY-SA 3.0
2018-01-30T15:11:32.390
41333
2018-01-31T12:18:40.767
2018-01-31T00:22:39.657
2383
27210
question
c# array unity2d
C# クラス型配列変数の初期化について


配列初期化子は指定した値の数と同じ長さの配列を作成し、各値を先頭から順に設定していきます。  
ですので値を1個しか書かなかった場合は2番目の要素`parr[1]`にアクセスすることができず、例外が発生します。また`parr.Length`も当然変化します。

なお`parr[0]`と`parr[1]`は同じ`new Person()`が指定されていますが、参照型では別のオブジェクトになります。

参考書でなぜ先頭しか使っていないのかはわかりません。配列の使用例としては不適切に思えます。


CC BY-SA 3.0
2018-01-30T15:33:32.473
41334
2018-01-30T15:33:32.473
5750
41333
answer


> ２行目のnew Person ()を何故２つ書いているのかがわかりません。

尤もな疑問です。これを入門書でやられると素直な学習の妨げにもなりかねないと思います。  
私がレビュアーなら、このような意図の不明な記述は承認できません。

推測ですが、元々は3行目以降で `parr[1]`
にアクセスするような意味のあるコードが記述されていたが、その後の手直しを繰り返すうちに削られてしまったのかも知れません。

> クラス型配列変数の初期化について

がその項のテーマであれば、私なら以下のように書きます。

[code]

    void Start() {
        string[] names = { "山田", "佐藤" };
        for (int i = 0; i < names.Length; i++) {
            Console.WriteLine(names[i]);
        }
    }
    
[/code]

余計なお世話かと思いますが、入門書は広く支持されている実績のあるものを選ばれた方が良いかと思います（今の時代、ネットにも良くまとめられた Web
サイトもあります）。


CC BY-SA 3.0
2018-01-31T12:18:40.767
41356
2018-01-31T12:18:40.767
26808
41333
answer