>>957
配列を動かしたいのに「Add」を使うのは間違い。
Addは新要素を付け足す時の関数だから、
すでに存在するkeyと同じものは付けたせない。
こういう記述にすべし:

CMDC[i] = CMDC[i-1];

ArrayListが使えない理由は分からんが、それならArray<>の方を使ってみては?
そもそもループで配列にアクセスするようなコードで、あえて遅いDictionaryを使うのは間違い。