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))

我收到错误消息:“AddressOf”表达式无法转换为“System.Delegate”,因为“System.Delegate”类型被声明为“MustInherit”并且无法创建。

我可以通过创建委托来解决这个问题。但是该代码旨在填充任何类型的默认值,因此我必须创建许多委托并编写很长的“选择案例”行

Public Delegate Function LongOutputFunction() As Long
Public Delegate Function StringOutputFunction() As String
Public Delegate Function BooleanOutputFunction() As Boolean

有没有人知道如何在不使用委托的情况下将函数作为参数传递?

谢谢。

4

0 回答 0