C#の多次元配列とは?初期化子と`new`の関係を徹底解説

プログラミング

はじめに

C#を扱っていると、多次元配列の宣言方法に戸惑うことがある。「new を書くべきか、それとも省略できるのか?」と疑問に思ったことはないだろうか。
筆者も最初の頃は、どちらの書き方が正しいのか曖昧なままコードを書いていた。今回は、自身の経験をもとにこの疑問を整理してみる。


スポンサーリンク
スポンサーリンク

多次元配列の宣言方法とnewの省略可否

C#では、多次元配列を宣言する際にnew データ型[,]を使うことが多い。しかし、これは必ずしも必要ではない。結論から言うと、配列のリテラル(初期化子)を使う場合はnewを省略できるが、そうでない場合は必須だ。

まず、具体例を見てみよう。

1. new を省略できるケース

配列の宣言と初期化を同時に行う場合、new を書かなくてもコンパイルが通る。

int[,] array = { { 1, 2, 3 }, { 4, 5, 6 } };

このように、直接 {} で値を並べると、C#のコンパイラが自動的に配列のサイズを推測し、適切な配列を生成する。そのため、new int[,] を省略しても問題ない。


2. new を省略できないケース

逆に、宣言と初期化を別々に行う場合は、new が必須になる。

int[,] array;
array = { { 1, 2, 3 }, { 4, 5, 6 } };  // コンパイルエラー

このコードはエラーになる。なぜなら、C#の仕様上、配列の初期化リテラル({})は、宣言時にしか使えないためだ。
もし、このように別の行で初期化したいなら、new を明示する必要がある。

int[,] array;
array = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };  // OK

また、配列のサイズだけを指定し、後で値を代入する場合もnewが必須。

int[,] array = new int[2, 3];  // { { 0, 0, 0 }, { 0, 0, 0 } } (デフォルト値)

このように、サイズだけを指定した場合、中身はデフォルト値(整数なら0)で埋められる。


3. var を使って簡潔に書く

C#には型推論(var)があるため、多次元配列の型を明示せずに書くことも可能だ。

var array = new[,] { { 1, 2, 3 }, { 4, 5, 6 } };  // 型推論により int[,] と判断される

このように書くと、new int[,] の部分が new[,] になり、型を省略できる。
C#の型推論は非常に強力で、配列の要素から自動的に型を推測してくれる。


まとめ

  • new データ型[,] は 省略可能 → 宣言と初期化を同時に行う場合
  • new データ型[,] は 必須 → 宣言と初期化を分ける場合 or サイズだけ指定する場合
  • var を使えば 型を省略して書くことも可能

最初は「new っていらないの?」と疑問に思っていたが、規則が分かるとスッキリする。
コードを書く際には、どのパターンに該当するのかを意識すると、エラーを未然に防げるはずだ。


参考リンク

コメント