我正在编写一个代码来写入我事先不知道的数据库表。插入新行时,某些数据需要具有“动态”默认值。我正在编写一个函数来做到这一点。
该代码旨在非常通用。所以我创建了一个名为 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
有没有人知道如何在不使用委托的情况下将函数作为参数传递?
谢谢。