我正在编写一个代码来写入我事先不知道的数据库表。插入新行时,某些数据需要具有“动态”默认值。我正在写一个函数来做到这一点。
该代码旨在非常通用。所以我创建了一个名为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'而无法创建。
我可以通过创建委托来解决此问题。但是代码的目的是填充任何类型的默认值,所以我必须创建许多delagates并编写很长的“Select Case”行
Public Delegate Function LongOutputFunction() As Long
Public Delegate Function StringOutputFunction() As String
Public Delegate Function BooleanOutputFunction() As Boolean
有没有人知道如何在不使用委托的情况下将函数作为参数传递?
感谢。