是否可以将十进制或整数作为参数接受到相同的值?例如:
我有一个“AddUpdateCondition”子例程来向ODBCCommand添加参数,我需要能够添加不同的数据类型。我可以只重载子程序,或者我可以将参数设置为某个对象,并检查是否传入了整数或小数?
我宁愿选择一种方法而不是这两种方法:
Protected Sub AddUpdateCondition(ByVal fieldName As String, ByVal cond As String, ByVal value As String, Optional ByVal type As String = "AND")
'If a where clause has not been added, create it.
If Not sql.ToString.Contains("WHERE") Then
sql.Append(" WHERE ")
Else
sql.Append(" " & type & " ")
End If
'Add the condition
sql.Append(fieldName & " " & cond & " = ?")
'Add the parameter for this condition
cmd.Parameters.AddWithValue(fieldName, value)
End Sub
Protected Sub AddUpdateCondition(ByVal fieldName As String, ByVal cond As String, ByVal value As Decimal, Optional ByVal type As String = "AND")
'If a where clause has not been added, create it.
If Not sql.ToString.Contains("WHERE") Then
sql.Append(" WHERE ")
Else
sql.Append(" " & type & " ")
End If
'Add the condition
sql.Append(fieldName & " " & cond & " = ?")
'Add the parameter for this condition
cmd.Parameters.AddWithValue(fieldName, value)
End Sub
答案 0 :(得分:2)
我认为使用Generic方法会更容易。请注意,value参数的类型指定为As T
,并且通过将(Of T)
添加到方法签名来使该方法成为通用的。
Protected Sub AddUpdateCondition(Of T)(ByVal fieldName As String, ByVal cond As String, ByVal value As T, Optional ByVal type As String = "AND")
' If a where clause has not been added, create it.
If Not sql.ToString.Contains("WHERE") Then
sql.Append(" WHERE ")
Else
sql.Append(" " & conjunction & " ")
End If
' Add the condition
sql.Append(fieldName & " " & cond & " = ?")
' Add the parameter for this condition
cmd.Parameters.AddWithValue(fieldName, value)
End Sub
并将其称为十进制:
AddUpdateCondition(Of Decimal)(...)
或者喜欢这个字符串:
AddUpdateCondition(Of String)(...)
答案 1 :(得分:1)
您可以在方法中添加一个指定类型的可选参数。这是您修改后的代码:
Protected Sub AddUpdateCondition(ByVal fieldName As String, ByVal cond As String, ByVal value As Decimal, ByVal requestedType As Type, Optional ByVal conjunction As String = "AND")
' If a where clause has not been added, create it.
If Not sql.ToString.Contains("WHERE") Then
sql.Append(" WHERE ")
Else
sql.Append(" " & conjunction & " ")
End If
' Convert the value
Dim convertedValue = CTypeDynamic(value, requestedType)
' Add the condition
sql.Append(fieldName & " " & cond & " = ?")
' Add the parameter for this condition
cmd.Parameters.AddWithValue(fieldName, convertedValue)
End Sub
按如下方式调用此方法(对于Integer
值):
AddUpdateCondition("name", "cond", 10, GetType(Integer))