[VB.NET] Enumerable.Repeat

2013年11月19日

 Enumerable.Repeat は 第一引数で得た値を、第二引数の指定数、繰り返し代入します。
 気を付けなくてはならないのは、第一引数の処理の実行は1回だけという点です。第一引数の処理が、第二引数の指定数だけ実行されるわけではない点です。
 したがって、第一引数が戻す型が参照型の場合、ひどい目にあう場合があります。

 

 コード

Module Module1
    Sub Main()
        Dim a() = Enumerable.Repeat(New Class1, 10).ToArray

        Console.WriteLine(String.Join("-", From x In a Select x.Value))

        a(0).Value = 1  ' 要素のうち1つしか変更していない(つもり)
        Console.WriteLine(String.Join("-", From x In a Select x.Value))
    End Sub
End Module

Class Class1
    Sub New()
        Console.WriteLine("New!")
    End Sub

    Public Value As Integer
End Class

 

 結果

New!                   ← "New!" は一回しか表示されない
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1    ← 全要素が"1"に変更されたかのように見える
続行するには何かキーを押してください . . .





カテゴリー: Program, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org