![](/img/trans.png)
[英]I am trying to implement a dictionary in VB.net where the value can be either a string or decimal
[英]Can I set a parameter to accept either an int or a decimal?
是否可以将十进制或整数作为参数接受到相同的值? 例如:
我有一个“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
我认为使用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)(...)
您可以在方法中添加一个指定类型的可选参数。 这是你修改过的代码:
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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.