是否有可能在VB.NET中为IF条件内的变量赋值?
类似的东西:
Dim customer As Customer = Nothing
If IsNothing(customer = GetCustomer(id)) Then
Return False
End If
谢谢
答案 0 :(得分:7)
抱歉,没有。另一方面,它会变得非常混乱,因为VB.NET使用相同的运算符进行赋值和相等。
If a = b Then 'wait, is this an assignment or comparison?!
相反,只需设置变量并进行比较:
Dim customer As Customer = Nothing
customer = GetCustomer(id)
If IsNothing(customer) Then
Return False
End If
答案 1 :(得分:4)
不,我很确定这是不可能的 - 但要感恩!
这是基于C语言的“功能”,我绝不会鼓励使用它,因为它可能经常被误用或误解。
我认为最好的方法是尝试表达“每行一个思想”,并抵制在同一行中组合两个操作的编码。以这种方式组合赋值和比较通常除了使代码更难理解之外没有其他任何作用。
答案 2 :(得分:3)
VB不能很好地完成这项工作,特别是因为赋值和比较都使用=
运算符。它会变得非常混乱。由于VB在某种程度上被设计为新手友好(“BASIC”中的B实际上代表“初学者”),具有多种副作用的表达并不是语言通常喜欢做的事情。
如果您必须在一行中完成所有操作,那么您可以将GetCustomer
方法分配给ByRef
参数,并返回一个布尔值,表示指定的值是否为null 。但实际上,最好只分配然后比较为null。
答案 3 :(得分:2)
没有内置支持来执行此操作,但您可以使用此解决方法。
Public Function Assign(Of T)(ByRef destination As T, ByVal value As T) As T
destination = value
Return destination
End Function
然后可以像这样使用。
Dim customer As Customer = Nothing
If IsNothing(Assign(customer, GetCustomer(id))) Then
Return False
End If
答案 4 :(得分:0)
大声思考因为你没有展示顾客或GetCustomer ......
Dim myCust As New Customer
If myCust.GetCustomer(someID) Then
End If
Class Customer
Private _customerID As Integer
Const noCustomer As Integer = -1
Public Sub New()
Me._customerID = noCustomer 'no customer
End Sub
Public Function GetCustomer(ByVal id As Integer) As Boolean
'perform required action to get customer
'if successful then set Me._customerID to ID else set it to no customer value
Return Me.HaveCustomer
End Function
Public Function HaveCustomer() As Boolean
If Me._customerID = noCustomer Then Return False Else Return True
End Function
End Class
答案 5 :(得分:0)
是的,可以在VB.NET的IF条件内为变量分配值。 甚至还提供了内置的支持,尽管范围有限:
If Interlocked.Exchange(customer, GetCustomer(id)) Is Nothing Then
Return False
End If
其中Interlocked类中的方法旨在在多线程环境中使用。按照设计,Exchange()的返回值是旧值,而不是新值。因此,要获得相当神秘的等效结果:
If (customer = Interlocked.Exchange(customer, GetCustomer(id)) And customer Is Nothing Then
return false
End If