「配列変数じゃもの足りない。データベースじゃ大げさ。」
そんな場合には、こんな方法で処理しています。
目次
1.配列を使う、今までのの方式
2.ArrayListを配列の代わりとして使う
3.ジェネリッククラスを使う
4.LINQで検索する
1.配列変数を使う、今までの方式
あるデータを複数まとめて扱う場合、配列変数に入れておくことは、よくあることだと思います。
例えば、チームのメンバーを配列変数に入れておく、といったような場合です。
まず、メンバー一人を表現するクラスを作ります。
Public Class Human
''' <summary>
''' 名前
''' </summary>
''' <remarks>苗字+名前の名前の部分</remarks>
Private pFirstName As String
''' <summary>
''' 苗字
''' </summary>
''' <remarks>苗字+名前の名前の苗字</remarks>
Private pLastName As String
''' <summary>
''' 生年月日
''' </summary>
Private pBarthday As Date
''' <summary>
''' コンストラクタ
''' </summary>
''' <param name="isFirstName">この人の名前</param>
''' <param name="isLastName">この人の苗字</param>
''' <param name="idBarthday">この人の生年月日</param>
Public Sub New(ByVal isFirstName As String, ByVal isLastName As String, ByVal idBarthday As Date)
pFirstName = isFirstName
pLastName = isLastName
pBarthday = idBarthday
End Sub
''' <summary>
''' 氏名(苗字+名前)を返す
''' </summary>
''' <returns>氏名</returns>
Public Function getFullName() As String
Return pLastName & pFirstName
End Function
End Class
こんな感じ。
次に、メンバー達を管理するために、配列変数を作ります。
Dim members(0 To 2) As Human 'あらかじめ大きさを決めておかないといけない
members(0) = New Human("太郎", "山田", #3/1/1950#)
members(1) = New Human("花子", "佐藤", #8/31/1970#)
members(2) = New Human("次郎", "山田", #3/1/2010#)
'すぐ追加できない。ReDimでサイズを変更しないと。
VB.NET(.NET Framework)の配列は賢いので、C言語のそれと比べれば扱いやすいですが、それでも、要素を追加したり削除するのは面倒です。
ArrayListを配列の代わりとして使う
そこで、ArrayListを使います。
Dim membersArrayList As New ArrayList '大きさを決めておかなくていい!
membersArrayList.Add(New Human("太郎", "山田", #3/1/1950#))
membersArrayList.Add(New Human("花子", "佐藤", #8/31/1970#))
membersArrayList.Add(New Human("次郎", "山田", #3/1/2010#))
'追加はAddすればいい!
membersArrayList.Add(New Human("智子", "鈴木", #5/1/1990#))
'For Each文で、簡単に各要素へアクセス
For Each oneMember As Human In membersArrayList
Debug.Print(oneMember.getFullName)
Next
上記のように、配列のように大きさを気にする必要がなくなる分コーディングが楽になり、本来コーディングしたい内容に集中でき、バグも入り込みにくくなります。
でも、ArrayListってめんどくさい
しかし、ArrayList.Add()
は引数にObject型を受け取るので、下記のように、違うものも追加できてしまいます。
'違う型も追加できてしまう!まぜるな危険!
Dim otherObject As New Object
membersArrayList.Add(otherObject)
こんな風に混じり物があると、For Each
で回した時、実行時エラーになってしまいます。
取り出すとオブジェクト型になってる
もう1つ厄介なことがあります。ArrayList.Items()
で1件のデータを取り出すと、Object型になっているので、キャストしないとHuman型のgetFullName()
を呼び出せません。
また、さっきのように「まぜちゃった」ら、キャストしたときに実行時エラーになってしまいます。
3.ジェネリッククラスを使う
4.LINQで検索する
(書き途中ですが、upしちゃいます)