タイトル : Re: 構造体をCSVへ出力の件 投稿日 : 2016/02/01(Mon) 16:52 投稿者 : shu
構造体を提示された状態で定義した場合、希望の実装は困難かと思います。 各項目の値をString配列とかList(Of String)などで格納するようにして おけばループさせることが可能なので実装しやすくなるかと思います。 構造体 実装例) Public Structure StXyz Public Enum Column Key Name Address NickName Memo Count End Enum Private _Initialized As Boolean Private _Values() As String Public Sub Init() _Values = Enumerable.Range(0, Column.Count).Select(Function(x) "").ToArray() _Initialized = True End Sub Public Property Values() As String() Get If Not _Initialized Then Init() End If Return _Values End Get Set(value() As String) _Initialized = True Dim CopyValue = value _Values = Enumerable.Range(0, Column.Count).Select( Function(x) If(x < CopyValue.Length, CopyValue(x), "")).ToArray() End Set End Property Public Property Key As String Get Return Values(Column.Key) End Get Set(value As String) Values(Column.Key) = value End Set End Property Public Property Name As String Get Return Values(Column.Name) End Get Set(value As String) Values(Column.Name) = value End Set End Property ・・・ 各メンバ分プロパティ化 ・・・ End Structure 使い方: '--- 実装例だとInitを呼ばないと各値への設定不可、プロパティの中でInitするような仕組み '--- にすれば使うときに省略することも可 Dim a As New StXyz() a.Init() a.Key = "key1" a.Name = "Name1" '--- 文字列配列により各値を渡すことが出来る Dim b As New StXyz() b.Values = {"key2", "name2", "Address2", "NickName2", "Memo2"} '--- メンバ数が不足している配列を渡した場合、後ろのメンバは空文字列が設定される Dim c As New StXyz() c.Values = {"key3", "Name3"} a,b,c共Valuesにより順番に項目値にアクセスが可能なので希望の処理が可能かと思います。 |