事前にわからないデータベースのテーブルに書き込むコードを書いています。新しい行を挿入するとき、一部のデータには「動的な」デフォルト値が必要です。そのための関数を書いています。
このコードは、非常に汎用的であることを目的としています。そこで、DefaultValueType というオブジェクトを作成しました
Public Class DefaultValueType
Public FieldName As String
Public DefaultValue As [Delegate]
Public Sub New(ByVal _FieldName As String, ByVal _DefaultValue As [Delegate])
Me.FieldName = _FieldName
Me.DefaultValue = _DefaultValue
End Sub
End Class
次のような関数で新しい行を作成します。
Public Sub CreateNewRows(ByVal DefaultValues As List(Of DefaultValue))
'Do some staff
'...
For i = 0 To DefaultValues.Count - 1
'... do some staff
'Default value of the row
NewRow.Item(DefaultValues(i).FieldName) = DefaultValues(i).DefaultValue.DynamicInvoke()
Next
End Sub
私の問題は、新しい DefaultValues を作成するときに使用することです
Dim X as new DefaultValue("ID",AddressOf(SomeFunction))
「System.Delegate」型が「MustInherit」と宣言されており、作成できないため、「AddressOf」式を「System.Delegate」に変換できません。
デリゲートを作成することで、この問題を解決できます。しかし、コードはあらゆるタイプのデフォルト値を埋めることを目的としているため、多くのデリゲートを作成し、「Select Case」の非常に長い行を書かなければなりません。
Public Delegate Function LongOutputFunction() As Long
Public Delegate Function StringOutputFunction() As String
Public Delegate Function BooleanOutputFunction() As Boolean
デリゲートを使用せずに Function をパラメーターとして渡す方法についてのアイデアはありますか?
ありがとう。