1

事前にわからないデータベースのテーブルに書き込むコードを書いています。新しい行を挿入するとき、一部のデータには「動的な」デフォルト値が必要です。そのための関数を書いています。

このコードは、非常に汎用的であることを目的としています。そこで、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 をパラメーターとして渡す方法についてのアイデアはありますか?

ありがとう。

4

0 に答える 0