クラス配列作成時に要素がnullになるのを防ぐ方法
最近、Listばっかり野郎から、配列も使ってやろうに変化したのですが、
クラス型の配列を作成した時の問題と対応をまとめておきます。
配列定義時の中身が・・・
適当なクラスの配列を作成してみます。
// 適当クラス public class TestClass { public int _Id = 0; public string _Name = ""; } // 起動時イベント void Start() { TestClass[] a_TestClass; a_TestClass= new TestClass[10]; // ↓↓変数に値を設定しようとするとエラーになる↓↓ a_TestClass[0]._Id = 1; }
こんな感じでクラス配列を作成した後、
要素のクラスに変数を設定しようとするとエラーになるはずです。
この理由は、
「クラス型の配列作成時、要素は全てnullになっている!」からです。
なので、すべての要素にインスタンスを作成する処理
a_TestClass[0]= new TestClass();
この処理を行わないと変数の設定ができません。。。
LINQをつかって一気にやってしまおう!
インスタンス作成処理をfor文で回してもいいのですが、
ただの配列作成処理なんだからスッキリさせたいです。
こんな時に重宝するのがLINQです。
配列作成の処理にSelect文をつかって1行で完結させましょう
// 起動時イベント void Start() { TestClass[] a_TestClass; a_TestClass= new TestClass[10].Select(x => { return new TestClass(); }).ToArray(); // ↓↓エラーにならない!↓↓ a_TestClass[0]._Id = 1; }
こんな感じで配列作成と要素にインスタンス作成の処理を1行でできます。
配列を使うメリットって何だろう?
最近、なんとなくですがListの必要がないものは
なるべく配列で組み込むようにしているのですが、
まぁまぁ良かったことをまとめときます
◆ 良かったこと
- 配列は作成した瞬間から要素が出来ているので、一時的にクラスを作る必要がない
- 高さが変動しないので、範囲外系のエラー時の原因追及がしやすい
- ToLinq、ToArrayがあるのでそこまで自由度が低くなることはそんなにない
- 「高さが変わらないなら配列」という明確なルールを持ってListと使い分けることで、型を見ただけで自分の意図が分かるからコードを読み返すときに楽
以上です
今更ですが配列は配列できっちりしていて好きになりました。