C#は電気羊の夢を見るか?(引っ越し中)

dtiブログが閉鎖とのことでhttp://tanocs.blog.fc2.com/へ引っ越します。

Enumerable.Repeatでハマった

Enumerable.Repeatの挙動が想像していたのと違うのでメモ


こんな感じのクラスがあったとする
    public class test

{
public int index;

public test(int n)
{
index = n;
}
}
で、それをEnumerable.Repeatを使って、デフォルトコンストラクタを呼び出す。
    test[] array = Enumerable.Repeat(new test(5), 10).ToArray();
すると、結果はarrayのindexはすべて5となる。
ここまでは良い。

そして、それに値をこんな感じでセットする
    for (int i = 0; i < array.Length; i++)

{
array[i].index = i;
}
すると、結果はarrayのindexは、すべて 9 になってしまう。


何故こんな事が起こるかというと、
Enumerable.Repeatは、指定された回数初期化処理を行うのではなくて、
指定された個数のコピーを作るに過ぎないと言うことっぽい。

これ、別のバグとワンセットになって潜んでいた性で、かなり苦労させられた。
Repeatの名に騙された・・・
このエントリーをはてなブックマークに追加
LINEで送る

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://t01a.dtiblog.com/tb.php/155-4a9ec494

« InvalidOperationExceptionが出るときの引数を犠牲にしない対処法  | HOME |  AndroidでUnityのInput.gyroを使う方法 »

PAGE TOP ▲

Appendix

■春条

■春条

生息地は愛知
車と甘い物が好きな31歳
特技は無限昼寝

MONOからSharpDXを使う
変態的な手法で、
.NET Frameworkを使わずに
ゲーム作りやってます。

Search

Calender

« | 2017-08 | »
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

Twitter

Recent Entries

DTIブログポータルへ
このブログを通報
Report Abuse

利用規約