問題
このようにZenjectのIInitializable.Initialize()メソッド内で配列を初期化しようとすると
int[] array = new int[10]; int num = 5; void IInitializable.Initialize() { for(int i = 0; i < 10; i++) { array[i] = num; } }
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
というエラーが出ます。
配列ではなくてListを使った場合も同様のエラーが出ます。
どうやらループの最後のi = 9
の場合だけが実行されているような気がします。原因は分かりません。
解決法
LINQを使って強引にforと同じことを行うと何故か上手くいきます。
int[] array = new int[10]; int num = 5; Enumerable.Range(0, 10) .ToList() .ForEach(i => { array[i] = num; });
(追記)
foreachを使ってもうまくいくことがわかりました。